Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c