Blog. Just Blog

Как программно создать ярлык

08.06.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ярлыки - одна из ключевых сущностей Windows. Это специальные файлы, служащие указателями на папки, программы или команды. Для управления ярлыками в Windows используется COM-объект ShellLink, точнее одна версия для ANSI и вторая для юникода. Они отличаются своими GUID. В любом из этих объектов реализовано по два интерфейса. Интерфейс IShellLink, с помощью которого можно получать и изменять свойства ярлыка, и интерфейс IPersistFile для работы непосредственно с самим файлом ярлыка.

Для доступа к COM-объектам первым делом надо обозначить их GUID:
  1. ; GUID {00021401-0000-0000-C000-000000000046}
  2. CLSID_ShellLink    dd 00021401h
  3.                    dw 0000h
  4.                    dw 0000h
  5.                    db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
  6.  
  7. ; GUID {000214F9-0000-0000-C000-000000000046}
  8. IID_IShellLinkW    dd 000214F9h
  9.                    dw 0000h
  10.                    dw 0000h
  11.                    db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
  12.  
  13. ; GUID {0000010B-0000-0000-C000-000000000046}
  14. IID_IPersistFile   dd 0000010Bh
  15.                    dw 0000h
  16.                    dw 0000h
  17.                    db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
Теперь надо описать интерфейсы, я сделаю это в виде структур, чтобы не путаться с индексами вызываемых методов. В одной из статей я уже отмечал, что на сайте MSDN названия методов идут не в том порядке, как они фактически представлены в интерфейсе. Не обошла проблема нестыковки и эти интерфейсы.
  1. ; IID_IShellLinkW Interface
  2. struct IShellLinkWDispatch
  3.     QueryInterface      dd ?
  4.     AddRef              dd ?
  5.     Release             dd ?
  6.  
  7.     GetPath             dd ?
  8.     GetIDList           dd ?
  9.     SetIDList           dd ?
  10.     GetDescription      dd ?
  11.     SetDescription      dd ?
  12.     GetWorkingDirectory dd ?
  13.     SetWorkingDirectory dd ?
  14.     GetArguments        dd ?
  15.     SetArguments        dd ?
  16.     GetHotkey           dd ?
  17.     SetHotkey           dd ?
  18.     GetShowCmd          dd ?
  19.     SetShowCmd          dd ?
  20.     GetIconLocation     dd ?
  21.     SetIconLocation     dd ?
  22.     SetRelativePath     dd ?
  23.     Resolve             dd ?
  24.     SetPath             dd ?
  25. ends
  26.  
  27. ; IID_IPersistFile Interface
  28. struct IPersistFileDispatch
  29.     QueryInterface      dd ?
  30.     AddRef              dd ?
  31.     Release             dd ?
  32.  
  33.     GetClassID          dd ?
  34.     IsDirty             dd ?
  35.     Load                dd ?
  36.     Save                dd ?
  37.     SaveCompleted       dd ?
  38.     GetCurFile          dd ?
  39. ends
Работа с ярлыком состоит из двух этапов. При создании ярлыка сперва надо назначить все его свойства, затем получить доступ к интерфейсу для работы с файлом ярлыка, а потом сохранить созданный ярлык в файл. Для обратной операции надо получить интерфейс для работы с файлами, прочитать файл ярлыка, а затем узнать его свойства.

Читать статью целиком »
Просмотров: 1170 | Комментариев: 0

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 1 (0.011 сек.) / Память: 4.5 Mb
Наверх