Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизКак найти путь к "Моим документам"? Найти похожие ветки
← →
ЁПРСТ (2004-05-19 11:36) [0]Какой функцией, имеется в виду, можно определить виндовскую переменную, которая хранит все эти: "C:\Doc&Set\Admin\My Doc" или "C:\Мои доки"?
← →
Тимохов © (2004-05-19 11:39) [1]VAR
kBuf: array [0..MAX_PATH] of Char;
kPIDL: PItemIDList;
BEGIN
SHGetSpecialFolderLocation(0, CSIDL_PERSONAL, kPIDL);
SHGetPathFromIDList(kPIDL,@kBuf[0]);
Result := PChar(@kBuf[0]);
END;
← →
Romkin © (2004-05-19 11:48) [2]Тимохов © (19.05.04 11:39) [1] Поубывав бы. А память под kPIDL кто освобождать будет?! Результат, у тебя, случайно не PChar?!!!
"Тихий" вариант:function GetMyDocuments: string;
var
pidl: PItemIDList;
path: array[0..MAX_PATH] of char;
Alloc: IMalloc;
begin
Result := "";
if SHGetSpecialFolderLocation(0,CSIDL_PERSONAL,pidl) = 0 then
try
if SHGetPathFromIDList(pidl,path) then
Result := path;
finally
if succeeded(SHGetMalloc(Alloc)) then
Alloc.Free(pidl);
end;
end;
← →
Тимохов © (2004-05-19 11:55) [3]
> Romkin © (19.05.04 11:48) [2]
Результат string - так, что все ок:
Result := PChar(@kBuf[0]);
004AFED6 8BC3 mov eax,ebx
004AFED8 8D542404 lea edx,[esp+$04]
004AFEDC E8174AF5FF call @LStrFromPChar
Про освобождение - спасибо, забыл :(((
← →
Тимохов © (2004-05-19 12:03) [4]вернее, забыл проверить пример из сети.
ЗЫ: все надо проверять!
ЗЫЫ: это так - попытка обелить себя в глазах общественности :)))
← →
ЁПРСТ (2004-05-19 12:08) [5]А еще ламерский вопрос можно? :( (Ну не работал я с API). В каком модуле эти процедуры находятся? Т.е. что в Units подключать надо, чтобы все заработало?
← →
Romkin © (2004-05-19 12:10) [6]Тимохов © (19.05.04 11:55) [3] Это не совсем забывчивость :) Дело в том, что в Windows SDK злостно опущена последняя строка, которая есть в msdn... И именно о том, что вызывающее SHGetSpecialFolderLocation приложение обязано освободить память, занятую PItemIDList.
Отсюда и отсутствие free, я сам поймался :(
← →
Romkin © (2004-05-19 12:12) [7]ЁПРСТ (19.05.04 12:08) [5] либо в ShellAPI, либо в ShlObj, не помню. А, точно, uses ShlObj надо
← →
Ajax © (2004-05-19 18:28) [8]А еще можно из реестра взять (по всей видимости приведенная выше API функции именно это и делает). Смотри HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders - там много ключей интересных.
← →
Игорь (2004-06-22 19:01) [9]ДА считай из реестра и не фиг ничего выделять и никто виноват не будет
← →
GuAV © (2004-06-22 23:36) [10]GetSpecialFolderPath - и никого освобождать не надо.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c