Blog. Just Blog

Получение списка программ, закрепленных на панели задач

15.04.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной из старых статей о работе с панелью задач я написал, что узнать список закрепленных программ можно перебором ярлыков в папке %APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar. Действительно, это можно сделать и так, но лучше делать это правильно, с использованием предназначенных для этого COM-интерфейсов системы. Начнем с описания констант, GUID и интерфейсов, которые нам понадобятся для работы.
  1. CLSCTX_INPROC_SERVER    = 1
  2. S_OK                    = 0
  3.  
  4. ; Windows Vista
  5. ; GUID {C3C6EB6D-C837-4EAE-B172-5FEC52A2A4FD}
  6. IID_IPinnedList dd 0C3C6EB6Dh
  7.                 dw 0C837h
  8.                 dw 04EAEh
  9.                 db 0B1h, 072h, 05Fh, 0ECh, 052h, 0A2h, 0A4h, 0FDh
  10.  
  11. ; Windows 7, 8, 8.1
  12. ; GUID {BBD20037-BC0E-42F1-913F-E2936BB0EA0C}
  13. IID_IPinnedList2 dd 0BBD20037h
  14.                  dw 0BC0Eh
  15.                  dw 042F1h
  16.                  db 091h, 03Fh, 0E2h, 093h, 06Bh, 0B0h, 0EAh, 00Ch
  17.  
  18. ; Windows 10 build 1809+
  19. ; GUID {0DD79AE2-D156-45D4-9EEB-3B549769E940}
  20. IID_IPinnedList3 dd 00DD79AE2h
  21.                  dw 0D156h
  22.                  dw 045D4h
  23.                  db 09Eh, 0EBh, 03Bh, 054h, 097h, 069h, 0E9h, 040h
  24.  
  25. ; IID_IPinnedList Interface
  26. struct IPinnedList
  27.     ; IUnknown
  28.     QueryInterface dd ?   ; 000h
  29.     AddRef         dd ?   ; 004h
  30.     Release        dd ?   ; 008h
  31.     ; IPinnedList
  32.     EnumObjects    dd ?   ; 00Ch
  33.     Modify         dd ?   ; 010h
  34.     GetChangeCount dd ?   ; 014h
  35.     IsPinnable     dd ?   ; 018h
  36.     Resolve        dd ?   ; 01Ch
  37.     IsPinned       dd ?   ; 020h
  38. ends
  39.  
  40. ; GUID {90AA3A4E-1CBA-4233-B8BB-535773D48449}
  41. CLSID_TaskbarPin dd 090AA3A4Eh
  42.                  dw 01CBAh
  43.                  dw 04233h
  44.                  db 0B8h, 0BBh, 053h, 057h, 073h, 0D4h, 084h, 049h
  45.  
  46. ; IID_IEnumFullIDList Interface
  47. struct IEnumFullIDList
  48.     ; IUnknown
  49.     QueryInterface dd ?
  50.     AddRef         dd ?
  51.     Release        dd ?
  52.     ; IEnumFullIDList
  53.     Next           dd ?
  54.     Skip           dd ?
  55.     Reset          dd ?
  56.     Clone          dd ?
  57. ends
Как это ни странно, интерфейсы IPinnedList и их методы относятся к недокументированным и информации по ним в интернете практически нет. Для Windows 7-8 используется интерфейс IPinnedList2, а для Windows 10 сборки 1809 и выше нужен интерфейс IPinnedList3. Можно заморочиться даже для Windows Vista, там используется интерфейс IPinnedList. Для получения списка закрепленных приложений нам потребуется только один метод - EnumObjects, к счастью, во всех трех интерфейсах он совпадает.

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

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