Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Мои Документы и API функции / 6 сообщений из 6, страница 1 из 1
12.04.2006, 19:00
    #33662466
Guest_18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мои Документы и API функции
Скажите, пожалуйста, можно ли в FoxPro использовать API функции? И если да то как их объявлять?

Есть API функции, которые возвращают путь к папке Мои Документы:

Код на Visual Basic.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Option Explicit

Private Declare Sub SHGetSpecialFolderLocation Lib "shell32" (ByVal hWnd As Long, ByVal csidl As Long, ppidl As Long)
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long)

Private Const CSIDL_PERSONAL As Long =  5 
Private Const MAX_PATH As Long =  260 

Sub Main()
Dim pidl As Long
Dim FilePath As String * MAX_PATH

SHGetSpecialFolderLocation  0 , CSIDL_PERSONAL, pidl
SHGetPathFromIDList pidl, FilePath
CoTaskMemFree pidl

MsgBox FilePath
End Sub

Как то же самое сделать на FoxPro?

Буду благодарен за любую помощь.
...
Рейтинг: 0 / 0
12.04.2006, 19:29
    #33662513
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мои Документы и API функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
* Объявление API-функций
Declare Long SHGetSpecialFolderLocation in Shell32.dll ;
		Long hWnd, Long csidl, Long @ppidl
Declare Long SHGetPathFromIDList in Shell32.dll ;
		Long pidList, String @lpBuffer
Declare Long CoTaskMemFree in ole32.dll ;
		Long pv1

* Объявление констант		
#DEFINE CSIDL_PERSONAL  5 
#DEFINE MAX_PATH  260 

* Объявление локальных переменных
LOCAL pidl, lcFilePath
pidl =  0 
lcFilePath = SPACE(MAX_PATH)

* Вызов функций
SHGetSpecialFolderLocation( 0 , CSIDL_PERSONAL, @pidl)
SHGetPathFromIDList(m.pidl, @lcFilePath)
CoTaskMemFree(m.pidl)

* Выделяю фрагмент до первого символа CHR( 0 )
m.lcFilePath = LEFT(m.lcFilePath,AT(CHR( 0 ),m.lcFilePath)- 1 )

* Отображаю результат
MessageBox(m.lcFilePath)
...
Рейтинг: 0 / 0
12.04.2006, 19:47
    #33662561
332_john
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мои Документы и API функции
А в XP вернет путь не на ту папку а в documents and settings

это вернее
?getenv("ProgramFiles")
...
Рейтинг: 0 / 0
13.04.2006, 11:24
    #33663643
Guest_18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мои Документы и API функции
Спасибо, работает!
Но появилось несколько вопросов:

знак @ - что обозначает? Что объявляется переменная типа указатель?
m.pidl - что означает и откуда появляется m. ? Это какое-то преобразование pidl?



авторА в XP вернет путь не на ту папку а в documents and settings

Не совсем понятно, на XP, ф-ция возвращает путь к папке МоиДокументы текущего пользователя.
Соответственно C:\Documents and Settings\текущий пользователь\Мои Документы
Что может быть неправильно? Или имеется ввиду, что на других версиях Windows (95-98) ф-ция вернет, что-то не то?

А как, через getenv() получить путь к папке Мои документы?
...
Рейтинг: 0 / 0
13.04.2006, 12:14
    #33663842
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мои Документы и API функции
Guest_18знак @ - что обозначает? Что объявляется переменная типа указатель?
Не совсем. Похоже, но несколько не то.

Для FoxPro это означает передачу параметра не по значению, а по ссылке. Т.е. изменение значение параметра внутри функции отразится на значении параметра во-вне функции.

Получается и указатель и собственно переменная "в одном флаконе"

Если символа @ нет, то как бы переданное значение не изменялось внутри функции "снаружи" на содержимом переменной это никак не отразится. Что было записано в этой переменной до вызова функции, то в ней и останется после.

Guest_18m.pidl - что означает и откуда появляется m. ? Это какое-то преобразование pidl?

Что означает префикс (буква) "m." перед именем
...
Рейтинг: 0 / 0
13.04.2006, 14:29
    #33664526
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мои Документы и API функции
Код: plaintext
1.
o=CreateObject("Wscript.Shell")
? o.SpecialFolders( 16 )
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Мои Документы и API функции / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]