Доброе время суток.
Есть такой код Но он не дает никаких результатов, почему ?
Function CreateLink(const PathObj, PathLink, Desc, Param: string): Boolean; var IObject: IUnknown; Begin
IObject := CreateComObject(CLSID_ShellLink);
(IObject as IShellLink).SetArguments(PChar(Param));
(IObject as IShellLink).SetDescription(PChar(Desc));
(IObject as IShellLink).SetPath(PChar(PathObj));
Result:=(IObject as IPersistFile).Save(PWChar(WideString(PathLink)), False)=S_OK; end;
Заранее благодарен.
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Здравствуйте Strannic, Вы писали:
S>Доброе время суток. S>Есть такой код Но он не дает никаких результатов, почему ?
S>Function CreateLink(const PathObj, PathLink, Desc, Param: string): Boolean; S>var IObject: IUnknown; S>Begin S> IObject := CreateComObject(CLSID_ShellLink); S> (IObject as IShellLink).SetArguments(PChar(Param)); S> (IObject as IShellLink).SetDescription(PChar(Desc)); S> (IObject as IShellLink).SetPath(PChar(PathObj)); S> Result:=(IObject as IPersistFile).Save(PWChar(WideString(PathLink)), False)=S_OK; S>end;
S>Заранее благодарен.
А что ты собственно хотел получить, какого результата ждал?
Опиши подробней. PathLink — существует или нет?
ICQ #311116826
Re[2]: Interface - почему не работает вот этот код ?
Здравствуйте Максим Алексейкин, Вы писали:
МА>А что ты собственно хотел получить, какого результата ждал? МА>Опиши подробней. PathLink — существует или нет?
Этим я хотел создать ярлык на объект PathObj, в папке PathLink (можно и рабочий стол, можно и корневой каталог), с наименованием Desc.
И всё.
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Re[3]: Interface - почему не работает вот этот код ?
Здравствуйте ak_alex, Вы писали:
AA>Здравствуйте Strannic, Вы писали: AA>[skip]
AA>Ты в pathLink'e должен с путём имя linka передать. У меня во всё работает:
AA>
Благодарю, до этого я как-то и не дошел. Ну тогда функцию лучше так представить.
Function CreateLink(const PathObj, PathLink, Desc, Param: string): Boolean;
var IObject: IUnknown;
NameLink : String;
Begin
NameLink:=ChangeFileExt(ExtractFileName(PathObj), '.lnk');
IObject := CreateComObject(CLSID_ShellLink);
(IObject as IShellLink).SetArguments(PChar(Param));
(IObject as IShellLink).SetDescription(PChar(Desc));
(IObject as IShellLink).SetPath(PChar(PathObj));
Result:=(IObject as IPersistFile).Save(PWChar(WideString(PathLink+'\'+NameLink)), False)=S_OK;
end;
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Re[4]: Interface - почему не работает вот этот код ?
Здравствуйте ak_alex, Вы писали:
AA>Здравствуйте Strannic, Вы писали: AA>[skip]
AA>Ты в pathLink'e должен с путём имя linka передать. У меня во всё работает:
AA>
Возникла другая траблинка.
Почему-то (IObject as IShellLink).SetDescription(PChar(Desc)) не принимает параметра, насколько я понимаю именно этот параметр отвечает за нименование ярлыка, но его имя почему-то равно имени ехе-файла. Почему?
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Re[5]: Interface - почему не работает вот этот код ?
Здравствуйте Strannic, Вы писали:
SS>Возникла другая траблинка. S>Почему-то (IObject as IShellLink).SetDescription(PChar(Desc)) не принимает параметра, насколько я понимаю именно этот параметр отвечает за нименование ярлыка, но его имя почему-то равно имени ехе-файла. Почему?
А с чего ты взял что он его не принимает. Он тебе вернул E_FAIL? Метод SetDescription интерфейса IShellLink устанавливает поле "Comment" (на второй закладке внизу, при просмотре свойст ярлыка). А наименованием ярлыка как раз служит его имя: например ярлык "Microsoft Visual C++ 6.0" имеет имя файла "Microsoft Visual C++ 6.0.lnk", так что всё правильно. А Поле Description, на первой закладке свойств ярлыка для exe-файла извлекается из его VERSIONINFO.
Re[6]: Interface - почему не работает вот этот код ?
Здравствуйте ak_alex, Вы писали:
AA>Здравствуйте Strannic, Вы писали:
AA>А с чего ты взял что он его не принимает. Он тебе вернул E_FAIL? Метод SetDescription интерфейса IShellLink устанавливает поле "Comment" (на второй закладке внизу, при просмотре свойст ярлыка). А наименованием ярлыка как раз служит его имя: например ярлык "Microsoft Visual C++ 6.0" имеет имя файла "Microsoft Visual C++ 6.0.lnk", так что всё правильно. А Поле Description, на первой закладке свойств ярлыка для exe-файла извлекается из его VERSIONINFO.
Да. Ты прав.
А я уж размечтался...
Еще раз спосибо.
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.