
Быстрый поиск
Введите фрагмент названия статьи для поиска
Перехват и обработка Alt+Tab
13.07.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня поэкспериментируем с системными событиями. Это очень мощный и интересный инструмент, с помощью которого можно оперативно реагировать на события до того момента, как они дойдут до приложения. В качестве примера будем перехватывать окно переключения процессов, которое появляется при нажатии комбинации Alt+Tab, а также обрабатывать выбор элементов в этом окне. Начнем с описания нужных нам констант.Code (Assembler) : Убрать нумерацию
- EVENT_SYSTEM_SWITCHSTART = 0x0014
- EVENT_SYSTEM_SWITCHEND = 0x0015
- EVENT_OBJECT_FOCUS = 0x8005
- WINEVENT_OUTOFCONTEXT = 0x0000
- WINEVENT_SKIPOWNPROCESS = 0x0002
Code (Assembler) : Убрать нумерацию
- wminitdialog:
- ; Обнулить хэндл окна Alt+Tab
- mov [hwndat],0
- invoke SetWinEventHook,EVENT_SYSTEM_SWITCHSTART,EVENT_SYSTEM_SWITCHEND,\
- NULL,WinEventProc,0,0,WINEVENT_OUTOFCONTEXT+WINEVENT_SKIPOWNPROCESS
- mov [hook],eax
Читать статью целиком »
Просмотров: 1610 | Комментариев: 5
Передача данных приложению с помощью WM_DROPFILES
09.07.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Обрабатывать перетаскивание файлов в окно программы мы уже умеем, а сегодня узнаем, как сэмулировать это действие, то есть передать стороннему приложению список файлов через отправку сообщения WM_DROPFILES.Начинаем с описания структуры DROPFILES, потому что FASM про нее ничего не знает. Так часто приходится писать подобное, что впору уже вводить какую-нибудь аббревиатуру, типа "Самостоятельно Описываем Структуры, Недостающие Интерфейсы, Константы Ассемблера" - "С.О.С.Н.И.К.А". Шутка.
Code (Assembler) : Убрать нумерацию
- struct DROPFILES
- pFiles dd ?
- pt POINT
- fNC dd ?
- fWide dd ?
- ends
Ну и сам код. Определяем размер и выделяем память, заполняем структуру и имена файлов, отправляем сообщение целевому окну.
Code (Assembler) : Убрать нумерацию
- ; Размер структуры DROPFILES
- mov ebx,sizeof.DROPFILES
- inc ebx
- ; Длина имени первого файла
- invoke lstrlen,file1
- add ebx,eax
- inc ebx
- ; Длина имени второго файла
- invoke lstrlen,file2
- add ebx,eax
- inc ebx
- ; Выделить память
- invoke GlobalAlloc,GMEM_SHARE+GMEM_MOVEABLE+GMEM_ZEROINIT,ebx
- mov [mem],eax
- invoke GlobalLock,eax
- mov [dfiles],eax
- ; Заполнить структуру DROPFILES
- mov edi,[dfiles]
- mov [edi+DROPFILES.pFiles],sizeof.DROPFILES
- mov [edi+DROPFILES.pt.x],0
- mov [edi+DROPFILES.pt.y],0
- mov [edi+DROPFILES.fNC],FALSE
- mov [edi+DROPFILES.fWide],FALSE
- add edi,sizeof.DROPFILES
- ; Дописать к ней передаваемые файлы
- mov esi,file1
- @@:
- lodsb
- stosb
- or al,al
- jnz @b
- mov esi,file2
- @@:
- lodsb
- stosb
- or al,al
- jnz @b
- ; Завершающий нулевой байт
- xor eax,eax
- stosb
- ; Отправить сообщение WM_DROPFILES
- invoke GlobalUnlock,[mem]
- invoke PostMessage,[destination_window],WM_DROPFILES,[mem],0
- invoke GlobalFree,[mem]
Читать статью целиком »
Просмотров: 1353 | Комментариев: 1
Получение информации о заголовке окна
12.06.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Получение информации о заголовке окна
Манипулировать кнопками в заголовке окна мы уже научились. А как узнать, какие кнопки отображаются в заголовке окна и в каком они состоянии? Конечно, можно пройтись по стилям, по меню, но правильнее будет воспользоваться следующей информацией. Мне кажется, она станет хорошим дополнением к статье об управлении кнопками в заголовке окна.
Читать статью целиком »
Просмотров: 1713 | Комментариев: 0
Выпадающий список (Combobox) с динамическим поиском
17.05.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Продолжаем усовершенствовать элемент Combobox. Создавать его мы научились, красивыми иконками снабдили, теперь давайте добавим полнотекстовый поиск по списку и фильтрацию. Справедливости ради стоит отметить, что зачаточный вариант поиска в комбобоксе все-таки присутствует. Если ввести какую-нибудь строку, а затем открыть выпадающий список, то курсор будет установлен на первом найденном пункте списка, который начинается с введенной строки. Я же хочу сделать так, чтобы в списке оставались только те пункты, в которых присутствует введенная строка, причем не только в начале, а вообще. Например, если я введу "Jo", то в списке должны остаться как "John Smith", так и "Patrick Joel".Изменения поля ввода будем отлавливать штатными средствами в обработчике комбобокса. Это должно быть уведомление CBN_EDITUPDATE. После этого сохраняем введенную строку в сухом прохладном месте, очищаем список, а затем заполняем его, но уже только теми пунктами, где присутствует введенная строка.
Code (Assembler) : Убрать нумерацию
- cmp [msg],WM_COMMAND
- je wmcommand
- ...
- ...
- wmcommand:
- cmp [wparam], CBN_EDITUPDATE shl 16 + ID_LIST
- je combobox_filter
Читать статью целиком »
Просмотров: 1573 | Комментариев: 0
Как защитить приложение от снятия скриншота
17.04.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как защитить приложение от снятия скриншота
Про ценность информации в современном цифровом мире можно рассказывать долго, но я этого делать не буду. Только хочу упомянуть такую безобидную на первый взгляд штуку, как скриншот экрана. "Алло, техподдержка, у меня тут программа что-то пишет непонятно" - "Пришлите скриншот". Тык в PrintScreen, вставить в письмо, отправить. Знакомая ситуация? А то, что в это время на экране может быть служебная или вовсе конфиденциальная информация, и куда она пойдет дальше, об этом мало кто думает. Если данные, отображаемые в окнах приложения, даже случайно не должны быть переданы не по назначению, то разработчикам софта стоит об этом позаботиться. На скриншоте как раз пример скриншота окна с защитой от скриншота (извините). Само окно есть, но его содержимое не отображается.
Читать статью целиком »
Просмотров: 3420 | Комментариев: 12


