Перехват и обработка изменения заголовка окна другого приложения
В предыдущих примерах обработки системных событий мы рассматривали глобальные события, которые происходят во всей системе. Чтобы завершить эту тему, хотелось бы рассказать о системных событиях, ограниченных конкретным приложением. В качестве примера возьмем перехват и обработку изменения заголовка окна какого-нибудь приложения. Немного констант, некоторые из которых вы уже знаете.Code (Assembler) : Убрать нумерацию
- EVENT_OBJECT_NAMECHANGE = 0x800C
- WINEVENT_OUTOFCONTEXT = 0x0000
- OBJID_WINDOW = 0x0000
- CHILDID_SELF = 0x0000
Code (Assembler) : Убрать нумерацию
- ; Найти нужное окно
- invoke FindWindow,NULL,szName
- ; Сохранить хэндл найденного окна
- mov [hExample],eax
- ; Получить идентификаторы процесса и потока, относящиеся к окну
- invoke GetWindowThreadProcessId,[hExample],pID
- mov [tID],eax
- ; Установить хук на системные события
- invoke SetWinEventHook,EVENT_OBJECT_NAMECHANGE,\
- EVENT_OBJECT_NAMECHANGE,NULL,WinEventProc,\
- [pID],[tID],WINEVENT_OUTOFCONTEXT
Code (Assembler) : Убрать нумерацию
- proc WinEventProc hWinEventHook:DWORD, event:DWORD, hwnd:DWORD,\
- idObject:DWORD, idChild:DWORD, idEventThread:DWORD,\
- dwmsEventTime:DWORD
- pusha
- ; Изменяемый объект - окно?
- cmp [idObject],OBJID_WINDOW
- jne .loc_ret
- ; Изменяется само окно?
- cmp [idChild],CHILDID_SELF
- jne .loc_ret
- ; Точно-точно изменяется?
- cmp [event],EVENT_OBJECT_NAMECHANGE
- jne .loc_ret
- ; И меняется именно нужное окно?
- mov eax,[hwnd]
- cmp eax,[hExample]
- jne .loc_ret
- ...
- ...
- ; Выполняются какие-то действия по факту события
- ...
- ...
- .loc_ret:
- popa
- ret
- endp
Безусловно, возможности и область применения системных событий не ограничиваются приведенными примерами. Зато теперь вы знаете, насколько это нужный и мощный инструмент, особенно при грамотном использовании.
В приложении пример программ с исходными текстами, одна из которых позволяет менять текст в заголовке своего окна, а вторая отслеживает и логирует эти изменения.
Просмотров: 1140 | Комментариев: 0
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Комментариeв нет
Добавить комментарий
Заполните форму для добавления комментария