Interface - почему не работает вот этот код ?
От: Strannic Россия www.new-point.ru
Дата: 26.06.02 13:30
Оценка:
Доброе время суток.
Есть такой код Но он не дает никаких результатов, почему ?

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;

Заранее благодарен.
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Re: Interface - почему не работает вот этот код ?
От: Максим Алексейкин Россия  
Дата: 26.06.02 15:39
Оценка:
Здравствуйте 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 - почему не работает вот этот код ?
От: Strannic Россия www.new-point.ru
Дата: 27.06.02 05:31
Оценка:
Здравствуйте Максим Алексейкин, Вы писали:

МА>А что ты собственно хотел получить, какого результата ждал?

МА>Опиши подробней. PathLink — существует или нет?

Этим я хотел создать ярлык на объект PathObj, в папке PathLink (можно и рабочий стол, можно и корневой каталог), с наименованием Desc.
И всё.
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Re[3]: Interface - почему не работает вот этот код ?
От: ak_alex Россия  
Дата: 27.06.02 07:18
Оценка: 3 (1)
Здравствуйте Strannic, Вы писали:
[skip]

Ты в pathLink'e должен с путём имя linka передать. У меня во всё работает:

  CreateLink('D:\report.vbs', 'D:\1.lnk', 'script','');
Re[4]: Interface - почему не работает вот этот код ?
От: Strannic Россия www.new-point.ru
Дата: 27.06.02 09:57
Оценка:
Здравствуйте ak_alex, Вы писали:

AA>Здравствуйте Strannic, Вы писали:

AA>[skip]

AA>Ты в pathLink'e должен с путём имя linka передать. У меня во всё работает:


AA>
AA>  CreateLink('D:\report.vbs', 'D:\1.lnk', 'script','');
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 - почему не работает вот этот код ?
От: Strannic Россия www.new-point.ru
Дата: 01.07.02 05:30
Оценка:
Здравствуйте ak_alex, Вы писали:

AA>Здравствуйте Strannic, Вы писали:

AA>[skip]

AA>Ты в pathLink'e должен с путём имя linka передать. У меня во всё работает:


AA>
AA>  CreateLink('D:\report.vbs', 'D:\1.lnk', 'script','');
AA>


Возникла другая траблинка.
Почему-то (IObject as IShellLink).SetDescription(PChar(Desc)) не принимает параметра, насколько я понимаю именно этот параметр отвечает за нименование ярлыка, но его имя почему-то равно имени ехе-файла. Почему?
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
Re[5]: Interface - почему не работает вот этот код ?
От: ak_alex Россия  
Дата: 02.07.02 09:56
Оценка:
Здравствуйте 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 - почему не работает вот этот код ?
От: Strannic Россия www.new-point.ru
Дата: 02.07.02 12:30
Оценка:
Здравствуйте ak_alex, Вы писали:

AA>Здравствуйте Strannic, Вы писали:


AA>А с чего ты взял что он его не принимает. Он тебе вернул E_FAIL? Метод SetDescription интерфейса IShellLink устанавливает поле "Comment" (на второй закладке внизу, при просмотре свойст ярлыка). А наименованием ярлыка как раз служит его имя: например ярлык "Microsoft Visual C++ 6.0" имеет имя файла "Microsoft Visual C++ 6.0.lnk", так что всё правильно. А Поле Description, на первой закладке свойств ярлыка для exe-файла извлекается из его VERSIONINFO.


Да. Ты прав.
А я уж размечтался...
Еще раз спосибо.
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.