Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Программы для работы с TypeLib

07.08.2023 | Категория: Software | Автор: ManHunter
TypeLib, оно же Type Library, - это хранилище информации о возможностях ActiveX-сервера. Такие библиотеки были введены для стандартизации способа получения подробных сведений об ActiveX-компоненте: списка реализуемых им классов и поддерживаемых интерфейсов, их идентификаторов, кратких описаний и прочего. Библиотеки могут храниться как в виде отдельных файлов, так и в ресурсах динамических библиотек. Это на самом деле очень удобно, когда надо посмотреть, какие методы реализует та или иная библиотека, какие GUID'ы надо использовать для инициализации интерфейсов, какие значения констант можно использовать в приложении. С программными способами доступа к этой информации мы поговорим позже, сейчас же набор инструментов, с помощью которых вы можете проанализировать содержимое хранилищ TypeLib различных форматов.


Скриншот программы OLE/COM Object Viewer

Начнем обзор с программы от разработчиков технологий COM и ActiveX. Основной официальный инструмент для работы с TypeLib - OLE/COM Object Viewer от Microsoft. Эта программа входит в состав пакета Windows SDK, включена в комплект инструментов Microsoft Visual Studio, но отдельно не распространяется.

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

GUID Helper 1.7

22.07.2023 | Категория: Мои программы | Автор: ManHunter

Скриншот программы GUID Helper

Программа-помощник для программистов, которая преобразует название и GUID из строковой записи в формат данных, принятый в Ассемблере. У программы есть собственная база данных, если введенное название GUID в ней присутствует, то вы сразу получите заполненное поле, соответствующее его значению. И наоборот, по строке GUID можно получить из базы его название. Если указанный GUID относится к интерфейсам, то опционально можно также получить его методы в виде структуры. Программа написана для личных нужд, так как мне надоело сперва искать в интернете нужные значения, а затем вручную переводить их в формат Ассемблера. Если программа пригодится кому-нибудь еще, то я буду только рад. Файлы баз данных представляют собой обычные ini-файлы, так что можете добавлять туда любые нужные вам значения или вообще заменить на свои собственные.

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

Пользовательская фильтрация в функции SHBrowseForFolder

16.07.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Функцию SHBrowseForFolder я оттюнинговал уже давно, казалось бы уже все, дальше некуда. Ан нет, есть куда. Сегодня разберем еще одну замечательную возможность этой функции, а именно пользовательскую фильтрацию. С ее помощью вы можете выводить в древовидный список только те папки и файлы, которые считаете нужным. Это будет очень полезно, когда надо дополнительно подстраховать пользователя от возможной ошибки.

Для реализации фильтрации используется технология COM, а это значит, что нам потребуется некоторое количество GUID'ов, структур и констант, которые не знает FASM.
  1. ; GUID {00000000-0000-0000-C000-000000000046}
  2. IID_IUnknown \
  3.     dd 000000000h
  4.     dw 00000h
  5.     dw 00000h
  6.     db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
  7.  
  8. ; GUID {C0A651F5-B48B-11D2-B5ED-006097C686F6}
  9. IID_IFolderFilterSite \
  10.     dd 0C0A651F5h
  11.     dw 0B48Bh
  12.     dw 011D2h
  13.     db 0B5h, 0EDh, 000h, 060h, 097h, 0C6h, 086h, 0F6h
  14.  
  15. ; IID_IFolderFilterSite Interface
  16. struct IFolderFilterSite
  17.     ; IUnknown
  18.     QueryInterface dd ?   ; 000h
  19.     AddRef         dd ?   ; 004h
  20.     Release        dd ?   ; 008h
  21.     ; IFolderFilterSite
  22.     SetFilter      dd ?   ; 00Ch
  23. ends
  24.  
  25. ; GUID {9CC22886-DC8E-11D2-B1D0-00C04F8EEB3E}
  26. IID_IFolderFilter \
  27.     dd 09CC22886h
  28.     dw 0DC8Eh
  29.     dw 011D2h
  30.     db 0B1h, 0D0h, 000h, 0C0h, 04Fh, 08Eh, 0EBh, 03Eh
  31.  
  32. ; IID_IFolderFilter Interface
  33. struct IFolderFilter
  34.     ; IUnknown
  35.     QueryInterface dd ?   ; 000h
  36.     AddRef         dd ?   ; 004h
  37.     Release        dd ?   ; 008h
  38.     ; IFolderFilter
  39.     ShouldShow     dd ?   ; 00Ch
  40.     GetEnumFlags   dd ?   ; 010h
  41.     refcount       dd ?
  42. ends
  43.  
  44. ; IID_IShellFolder Interface
  45. struct IShellFolder
  46.     ; IUnknown
  47.     QueryInterface   dd ?   ; 000h
  48.     AddRef           dd ?   ; 004h
  49.     Release          dd ?   ; 008h
  50.     ; IShellFolder
  51.     ParseDisplayName dd ?   ; 00Ch
  52.     EnumObjects      dd ?   ; 010h
  53.     BindToObject     dd ?   ; 014h
  54.     BindToStorage    dd ?   ; 018h
  55.     CompareIDs       dd ?   ; 01Ch
  56.     CreateViewObject dd ?   ; 020h
  57.     GetAttributesOf  dd ?   ; 024h
  58.     GetUIObjectOf    dd ?   ; 028h
  59.     GetDisplayNameOf dd ?   ; 02Ch
  60.     SetNameOf        dd ?   ; 030h
  61. ends
  62.  
  63. struct STRRET
  64.     uType dd ?
  65.     cStr  rb 260
  66. ends
  67.  
  68. SHCONTF_FOLDERS    = 0x00000020
  69. SHCONTF_NONFOLDERS = 0x00000040
  70.  
  71. SFGAO_FOLDER = 0x20000000
  72.  
  73. SHGDN_FORPARSING = 0x8000
  74.  
  75. BFFM_IUNKNOWN = 5
  76.  
  77. ; Флаги открытия диалога
  78. BIF_RETURNONLYFSDIRS   = 1
  79. BIF_DONTGOBELOWDOMAIN  = 2
  80. BIF_BROWSEINCLUDEFILES = 0x00004000
  81. BIF_NEWDIALOGSTYLE     = 0x00000040
Теперь немного теории. В callback-функцию BrowseCallbackProc диалога выбора помимо прочих сообщений приходит сообщение BFFM_IUNKNOWN, в параметре lParam которого системой передается указатель на интерфейс IUnknown. Через метод QueryInterface этого интерфейса можно получить указатель на интерфейс IFolderFilterSite. Затем с помощью метода SetFilter этого интерфейса нужно установить пользовательский фильтр. Фильтр представляет собой объект IFolderFilter, реализация методов которого ложится целиком и полностью на разработчика приложения. Благо их совсем немного.

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

Распаковка ZIP-архивов на Ассемблере

08.07.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Распаковка ZIP-архивов на Ассемблере

Если система выполняет какие-то действия "из коробки", то с очень большой вероятностью ваше приложение также сможет их использовать, надо только узнать как. Начиная с Windows XP, Проводник может работать с архивами в формате ZIP, как будто это обычные каталоги. Файлы и подкаталоги из них извлекаются обычным копированием. Давайте научимся делать то же самое.

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

Обработка событий IWebBrowser на Ассемблере

29.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Обработка событий IWebBrowser на Ассемблере

В предыдущей статье про работу со встроенным браузером я написал, что статус полной загрузки страницы можно отслеживать при помощи таймера и вызова метода get_ReadyState интерфейса IWebBrowser2. Способ имеет место быть, но также имеет немало недостатков. Правильное решение этой задачи - получения сигналов от объекта браузера и обработка событий IWebBrowser. Пришлось провести пару бессонных ночей в отладчике, но результат меня порадовал.

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

prev 01 02 03 04 05 06 07
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2023
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 4 (0.0037 сек.) / Память: 4.5 Mb
Наверх