Re: Чтение из ярлыка. Делфи
Здарова, monah!
21 апреля 2004 г., среда, 19:20:37 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "Чтение из ярлыка. Делфи",
в котором сообщалось следующее:
m> Тут спрашивали как создать ярлык, у меня задача противоположная, как
m> по имеющемуся ярлыку узнать путь к приложению, ассоцированную иконку,
m> заголовок, и т.д. короче максимально полная редакция ярлыка.
m> Спасибо.
Писал под себя так что ногами сильно не пинать. Писал давно, насколько
помню реализовано только вытаскивание пути из ярлыка. Далее, надеюсь,
разберешься как твои задачи реализовать.
uses ShlObj, ActiveX, ComObj;
procedure SetLnk(DesPath:string);
var sPath:array[0..Max_Path] of Char;
SrcFile,SrcName:string;
WidePath:WideString;
IShLink:IShellLink;
IPFile:IPersistFile;
IUnk:IUnknown;
hRes:hResult;
begin
GetWindowsDirectory(sPath,Max_Path);
SrcFile:=paramstr(0);
SrcName:='Html Viewer';
IUnk:=CreateComObject(CLSID_ShellLink);
IShLink:=IUnk as IShellLink;
IPFile:=IUnk as IPersistFile;
with IShLink do
begin
hRes:=SetPath(PChar(SrcFile));
if Succeeded(hRes) then
hRes:=SetWorkingDirectory(PChar(ExtractFilePath(SrcFile)));
if Succeeded(hRes) then
SetDescription(PChar(SrcName))
end;
WidePath:=DesPath+SrcName+'.lnk';
if Succeeded(hRes) then
hRes:=IPFile.Save(PWChar(WidePath),False);
if Failed(hRes) then
MessageDlg('Error-PersistFile.Save failed',mtError,[mbOK],0);
end;
function GetLnkPath(PathToFile:string):string;
var pShlLnk:IShellLink;
pszPath:array[0..MAX_PATH-1] of Char;
win32FD:TWin32FindData;
ppF:IPersistFile;
hRes:hResult;
IUnk:IUnknown;
pSource:WideString;
begin
Result:='';
IUnk:=CreateComObject(CLSID_ShellLink);
pShlLnk:=IUnk as IShellLink;
ppF:=IUnk as IPersistFile;
pSource:=PathToFile;
hRes:=ppF.Load(pWideChar(pSource),STGM_READ);
if Succeeded(hRes) then
begin
hRes:=pShlLnk.Resolve(Application.Handle,SLR_ANY_MATCH);
if Succeeded(hRes) then
begin
hRes:=pShlLnk.GetPath(@pszPath,MAX_PATH,Win32FD,0);
if Succeeded(hRes) then Result:=string(pChar(@pszPath));
end;
end;
end;