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

Вниз

Lnk.   Найти похожие ветки 

 
Arkan ©   (2002-09-19 21:53) [0]

Как программно узнать путь к файлу из *.LNK файла?


 
Smiths   (2002-09-19 23:09) [1]

См. формат файла lnk.


 
REA   (2002-09-20 10:20) [2]

Наверно в ShellAPI должно что-то быть. Точно не уверен.


 
Рыжик ©   (2002-09-20 10:48) [3]

uses ShlObj,ComObj,ActiveX;

procedure ResolveIt(wnd:HWND;lpszLinkFile:string;var lpszPath:string);
var sl:IShellLink;
so:IUnknown;
pf:IPersistFile;
LinkPath:PWideChar;
wfd:WIN32_FIND_DATA;
path:PChar;
begin
lpszPath := "";
path:=nil;
CoInitialize(nil);
try
//Получаем указатель на IShellLink интерфейс.
So:=CreateComObject(CLSID_ShellLink);
//Получаем указатель на IPersistFile интерфейс.
pf:=so as IPersistFile;
LinkPath:=PWChar(WideString(lpszLinkFile));
//Загружаем ярлык.
pf.Load(LinkPath, STGM_READ);
sl:=so as IShellLink;
sl.Resolve(wnd, SLR_ANY_MATCH);
//Получаем имя файла.
sl.GetPath(Path,MAX_PATH, wfd,SLGP_SHORTPATH );
lpszPath:=Path;
finally
so:=Unassigned;
CoUninitialize;
end;
end;


wnd:HWND - окно для вывода сообщений;
lpszLinkFile - имя .lnk-файла;
lpszPath - возвращает имя файла, на который ссылается ярлык


 
REA   (2002-09-20 10:53) [4]

Я не силен в COM.
Вот эту штуку обязательно делать: CoInitialize(nil);
Delphi сам не делает? И зачем, если не трудно объясните (не с точки зрения функциональности, а с точки зрения логики)?


 
Рыжик ©   (2002-09-20 11:42) [5]

Не совсем так. Правильно будет так:
procedure ResolveIt(wnd:HWND;lpszLinkFile:string;var lpszPath:string);
var sl:IShellLink;
so:IUnknown;
pf:IPersistFile;
LinkPath:PWideChar;
wfd:WIN32_FIND_DATA;
path:array[0..Max_Path-1] of Char;
begin
lpszPath := "";
So:=CreateComObject(CLSID_ShellLink);
try
pf:=so as IPersistFile;
LinkPath:=PWChar(WideString(lpszLinkFile));
pf.Load(LinkPath, STGM_READ);
sl:=so as IShellLink;
sl.Resolve(wnd, SLR_ANY_MATCH);
sl.GetPath(path,MAX_PATH, wfd,SLGP_SHORTPATH );
lpszPath:=string(Path);
finally
so:=Unassigned;
end;
end;


CoInitialize в данном примере не обязательно. Просто пример был взят из программы, в которой это было нужно.


 
Arkan ©   (2002-09-20 19:29) [6]

Какой модуль надо подключить? У меня со стандартными не работает...



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.018 c
1-8004
Mazenrat
2002-09-20 15:17
2002.10.03
StrToInt и IntToStr без sysutils.


6-8078
RV
2002-07-22 11:33
2002.10.03
RAS + стандартные средства Делфей и Видов


1-8053
X-Shadow
2002-09-22 06:20
2002.10.03
Помогите в этим пожалуйста


1-8019
Yegor Derevenets
2002-09-21 19:26
2002.10.03
Программное встраивание


1-7916
Yarovoi Andrei
2002-09-23 18:21
2002.10.03
как можно узнать код любого знака в Memo Редакторе ?