Самоучитель по Delphi 7 для профессионалов



             

Интерфейс IShellLink - часть 2


function GetIconLocation(pszIconPath: PAnsiChar; cchlconPath: Integer; out pilcon: Integer): HResult; stdcall;

function SetlconLocation(pszIconPath: PAnsiChar; ilcon: Integer): HResult; stdcall;

function SetRelativePath(pszPathRel: PAnsiChar; dwReserved: DWORD): HResult; stdcall;

function Resolve(Wnd: HWND; fFlags: DWORD): HResult; stdcall; 

function SetPath(pszFile: PAnsiChar): HResult; stdcall; 

end;

Сохраним ярлык для данной программы-примера где-нибудь на диске, скажем, в той же самой папке. Для этого создадим новый объект NewLink класса CLSiD_shellLink, предоставляющий нам нужный интерфейс:

procedure TForml.ButtonlClick(Sender: TObject);

 var NewLink : IShellLink; 

fn, fp : string; ws : WideString; hRes : THandle;

pf : IPersistFile;

begin

NewLink := CreateComObject(CLSID_ShellLink) as IShellLink; fn := ParamStr(O); NewLink.SetPath(pchar(fn)); 

fp := ExtractFilePath(fn); NewLink.SetWorkingDirectory(pchar(fp)); NewLink.SetDescription

(pChar(Application.Title)); 

ws := fp+Application.Title+'.Ink';

hRes := NewLink.Querylnterface(IID__IPersistFile, pf) ; if Succeeded(hRes) then

pf.Save(pWideChar(ws),False);

end;

В этом примере помимо IShellLink нужно получить доступ к интерфейсу IPersistFile, который "умеет" записывать данные. Задав параметры ярлыка, мы записываем его на диск. При этом проверяется тот факт, что созданный нами объект поддерживает интерфейс IPersistFile. Если указатель на этот интерфейс получен, вызывается его метод save.

Среди перечисленных выше методов IShellLink особое внимание уделим методу Resolve. Он понадобится вам при получении указателя на интерфейс уже существующих ярлыков. Windows пытается вести себя "разумно" и отслеживает перемещения и переименования объекта, на который указывает существующий IShellLink. Но если вы записали содержимое ярлыка в поток (или на диск), то отследить соответствие ярлыка объекту должны сами, вызвав метод Resolve. Если объект, на который ссылается ярлык, по-прежнему находится на своем месте, метод немедленно завершается с нормальным кодом возврата. Если файл или объект перемещен или переименован, начинается его поиск (рис. 31.2).




Содержание  Назад  Вперед