powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Мои Документы и API функции
6 сообщений из 6, страница 1 из 1
Мои Документы и API функции
    #33662466
Guest_18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, пожалуйста, можно ли в 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
Мои Документы и API функции
    #33662513
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Мои Документы и API функции
    #33662561
332_john
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в XP вернет путь не на ту папку а в documents and settings

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

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



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

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

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

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

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

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

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

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


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