Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
3-7861
Rule
2002-09-13 01:07
2002.10.03
Помогите пожалуйста, горю. До утра надо сделать!!!!


3-7824
REA
2002-09-11 10:52
2002.10.03
Агрегатные поля


14-8144
FLIZ_
2002-09-04 11:49
2002.10.03
как в InstallShieldExpress сделать заголовок русским шрифтом?


3-7795
АндрейП
2002-09-11 19:03
2002.10.03
Индексирование Lookup-поля ...


14-8116
Oleg_Gashev
2002-09-04 23:54
2002.10.03
Работа




   Наверх