
J2EE Developer

Профиль
Группа: Участник
Сообщений: 160
Регистрация: 29.11.2006
Где: Одесса
Репутация: нет Всего: нет
|
Добрый вечер, никак не могу разобраться как выполнить поставленную задачу: Разработать хук который бы в разрабатываемой программе перехватывал сообщения типа активация какого-либо окна и выводил у себя аАдрес оконной процедуры для окна, над которым нажата левая кнопка мыши. есть наработки: Это собственно dll_hook.asm | Код |
386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib
HOOK_CBT equ WM_USER ; для создания пользовательского сообщения
.data hInstance dd 0
.data? hHook dd ? hWnd dd ?
.code DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD push hInst pop hInstance mov eax,TRUE ret DllEntry Endp
HookProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD invoke CallNextHookEx,hHook,nCode,wParam,lParam mov edx,lParam .if nCode==HCBT_ACTIVATE mov eax,wParam invoke PostMessage,hWnd,HOOK_CBT,eax,0 ; передаем 0 .endif assume edx:nothing ; xor eax,eax ret HookProc endp
InstallHook proc hwnd:DWORD push hwnd pop hWnd
window_ok: invoke SetWindowsHookEx,WH_CBT,addr HookProc,hInstance,NULL ; ставим hook ; типа WH_CBT для системы mov hHook,eax ret InstallHook endp
UninstallHook proc invoke UnhookWindowsHookEx,hHook ret UninstallHook endp
End DllEntry
|
А это оконное приложение: | Код | .386 .model flat,stdcall option casemap:none
include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc
includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib includelib dll_hook.lib
InstallHook proto :DWORD UninstallHook proto HookProc proto :DWORD,:DWORD,:DWORD DlgFunc proto :DWORD,:DWORD,:DWORD,:DWORD
HOOK_CBT equ WM_USER
.data dialog_name db "DIAL",0 hInstance dd ? buffer db 128 dup(?) text_buffer db 'activated window',0
.code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,addr dialog_name,NULL,addr DlgFunc,NULL invoke ExitProcess,NULL
DlgFunc proc hDlg:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg==WM_CLOSE invoke UninstallHook invoke EndDialog,hDlg,NULL
.elseif uMsg == WM_INITDIALOG invoke InstallHook,hDlg .if eax == 0 invoke ExitProcess,0 .endif
.elseif uMsg==HOOK_CBT ; invoke GetClassName,wParam,addr class_name_buffer,128 ; invoke GetWindowText,wParam,addr window_text_buffer,128 invoke dw2hex, wParam,addr buffer invoke SendDlgItemMessage, \ hDlg, \ 1, \ LB_ADDSTRING, \ NULL, \ addr buffer
invoke SendDlgItemMessage, \ hDlg, \ 1, \ LB_ADDSTRING, \ NULL, \ addr text_buffer .else mov eax,FALSE ret .endif mov eax,TRUE ret DlgFunc endp
end start
|
Буду очень признателен. Спасибо.
|