ќ начальное состо¤ние окна, соответствующего объекту (нормальное, минимизированное, максимизированное) (ShowCmd);
□ путь к значку, соответствующему объекту (Iccn Location) ;
□ описание объекта (Inscription) ;

□ сочетание "гор¤чих" клавиш (HotKey).

ƒл¤ всех этих свойств ¤рлыка в интерфейсе дано по паре методов - один дл¤ чтени¤, другой дл¤ установки значени¤:

IShellTnnk = interface (IUnknown) { sl }

[SmjShellljmkA]

fLrxticn Getfet±i(pszFile: PAnsiChar;
сс…”№хЎЎ: Txiteger;
varpfd: Twin32FindData;
fFlags: DaDRD) : HResult;
stdcall;
fiixtian GetIDList(var ppidl: PItemIDList): HResult;
Stdcall;
fiixtian setiDList (pidi: PltemlTXist) : HResult;
stckall;
functionGetJJescxir±im(pszєrrE: PAnsiChar;
cchMaxName: Txiteger): HResult;
stdcall;
furxticn setDescription(pszName: PAnsiChar) : HResult;
stdcall;
furxticnGetworkingDirectory (pszDir: PAnsiChar;
cchMaxfeth: Tnteger): HResult;
stdcall;
furxticnsetworkingDirectory(pszDir: PAnsiChar) : HResult;
stdcall;
furxticnGetArgiments(pszArgs: PAnsiChar;
cchlYaxPath: Txiteger): HResult;
stdcall;
furxticn setArgimentstpszArgs: PAnsiChar) : HResult;
stdcall;
furxticn GetHotkey (var pwHotkey: Word): HResult;
stdcall;
furxticnSetHotkey(wHotkey: Word) : HResult;
stdcall;
furxticn GetshowCmd (out pishowcmd: Triteger) : HResult;
stdcall;
furxticn &t£3rjAOrd(ii3rjAQTd.: Triteger) : HResult;
stckall;
fuTxtion G^lccnlrxatim(pszlccnfet±i: PAnsiChar;
cchiconPath: Tnteger;
outpiicon: Txiteger): HResult;
stdcall;
function SetlconLocation(pszIconPath: PAnsiCheir;
ilcon: Integer) : HResult;
stdcall;
function SetRelativePath (pszFathRel: 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: TDbject);
var NewLink : IShellLink;
fn, fp : string;
ws : WideString;
hRes : THandle;
pf : IPersistFile;
begin
NewLink := CreateComObject (CLSID_ShellLink) as IShellLink;
fn := ParamStr (0);
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).


⇐ ѕредыдуща¤ страница| |-ледующа¤ страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Ноябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс