Мне нужно создать ярлык к программе с иконкой оптического привода, а не программы. Как известно, ExtractAssociatedIcon возвращает хендл иконки. А в конструкции MySLink.SetIconLocation нужно указывать путь к иконке. Вопрос: как подружить MySLink.SetIconLocation и ExtractAssociatedIcon ?
| Код | uses ...ShlObj, ActiveX, ComObj, ShellApi;
function GetAssociatedIcon(FileName: String; IconIndex: Word): hIcon; begin Result := ExtractAssociatedIcon(HInstance, PChar(FileName), IconIndex); end;
procedure TForm1.Button1Click(Sender: TObject); var MyObject: IUnknown; MySLink: IShellLink; MyPFile: IPersistFile; WFileName: WideString; IconIndex: Word; icon: hIcon; begin MyObject := CreateComObject(CLSID_ShellLink); MySLink := MyObject as IShellLink; MyPFile := MyObject as IPersistFile; with MySLink do begin SetPath(PChar(ParamStr(0))); SetArguments('params'); SetWorkingDirectory(PChar(ExtractFilePath(ParamStr(0))));
//Вытянул иконку своего оптического привода (E:\)... icon := GetAssociatedIcon(PChar('E:\'), IconIndex);
//...а теперь, как ее назначить ярлыку, ведь SetIconLocation требует путь к иконке, а не хендл? SetIconLocation('путь к иконке', 0);
end; WFileName := ParamStr(0) + '.lnk'; MyPFile.Save(PWChar(WFileName), False); end;
|
|