Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Как найти путь к "Моим документам"?   Найти похожие ветки 

 
ЁПРСТ   (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 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.064 c
10-1025241119
Nikols
2002-06-28 09:11
2004.08.01
Работает только на разных машинах...


4-1086624324
killer
2004-06-07 20:05
2004.08.01
Браузер установленный по умолчанию


3-1089027525
jenya_d
2004-07-05 15:38
2004.08.01
Утилиты администрирования MS SQL 2000


14-1089619301
Alone
2004-07-12 12:01
2004.08.01
Красота по Американски


14-1089833498
YurikGL
2004-07-14 23:31
2004.08.01
Firewall и сеть