Blog. Just Blog

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

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

Получение информации о заголовке окна

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

Для получения подробной информации о заголовке окна ему отправляется сообщение WM_GETTITLEBARINFOEX. Если все прошло успешно, на выходе получается заполненная структура TITLEBARINFOEX, в которой содержится информация о позициях и состоянии кнопок в заголовке окна, а также о размере самого заголовка.

Сперва надо описать структуру TITLEBARINFOEX и несколько констант, так как FASM в базовой комплектации о них не знает. Скорее всего это потому, что сообщение WM_GETTITLEBARINFOEX поддерживается только в Windows Vista и выше.
  1. struct TITLEBARINFOEX
  2.         cbSize        dd ?
  3.         rcTitleBar    RECT
  4.         stateTitleBar dd ?
  5.         sReserved1    dd ?
  6.         stateMinimize dd ?
  7.         stateMaximize dd ?
  8.         stateHelp     dd ?
  9.         stateClose    dd ?
  10.         rReserved0    RECT
  11.         rReserved1    RECT
  12.         rectMinimize  RECT
  13.         rectMaximize  RECT
  14.         rectHelp      RECT
  15.         rectClose     RECT
  16. ends
  17.  
  18. WM_GETTITLEBARINFOEX     = 0x033F
  19.  
  20. STATE_SYSTEM_FOCUSABLE   = 0x00100000
  21. STATE_SYSTEM_INVISIBLE   = 0x00008000
  22. STATE_SYSTEM_OFFSCREEN   = 0x00010000
  23. STATE_SYSTEM_UNAVAILABLE = 0x00000001
  24. STATE_SYSTEM_PRESSED     = 0x00000008
При описании TITLEBARINFOEX я немного отошел от MSDN'овского описания, там состояния и координаты описаны шестиэлементными массивами, а я для удобства работы дал им осмысленные имена вместо числовых индексов. Сути это не меняет, размера структуры тоже.

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

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

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
Работа с ярлыком состоит из двух этапов. При создании ярлыка сперва надо назначить все его свойства, затем получить доступ к интерфейсу для работы с файлом ярлыка, а потом сохранить созданный ярлык в файл. Для обратной операции надо получить интерфейс для работы с файлами, прочитать файл ярлыка, а затем узнать его свойства.

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

Исследование защиты скринсейвера Forest Lake

07.06.2020 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот скринсейвера Forest Lake

С полноценным отдыхом пока напряженка, так что остается наслаждаться виртуальными путешествиями. Скринсейвер Forest Lake переносит нас на берег лесного озера, где под приятную музыку плещется вода, летают птички и бабочки, плавают рыбки. Идиллию нарушает только необходимость выкладывать за это все деньги.

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

Как отключить блокировку компьютера в Windows

04.06.2020 | Категория: Software | Автор: ManHunter

Как отключить блокировку компьютера в Windows

Блокировка компьютера - обычная мера защиты системы от посторонних глаз и шаловливых рук, когда вам надо ненадолго отойти от компьютера. А можно ли вообще отключить эту блокировку? Честно говоря, я не придумал, для каких случаев это может понадобиться, но на всякий случай расскажу, как это сделать.

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

Исследование защиты скринсейвера Zen Light

02.06.2020 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот скринсейвера Zen Light

Сегодня будем разбирать защиту скринсейвера Zen Light. Эта заставка показывает очень красивые световые эффекты вроде северного сияния. Цена программы невелика, но это точно не наш метод.

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

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