当前位置: 代码迷 >> 汇编语言 >> WH_JOURNALRECORD钩子的有关问题
  详细解决方案

WH_JOURNALRECORD钩子的有关问题

热度:1813   发布时间:2013-02-26 00:00:00.0
WH_JOURNALRECORD钩子的问题
看到老罗的win32的第11章日志记录钩子实现键盘钩子,后来我根据这个改了一下,做了一个实验,在钩子回调函数中判断如果按键是F1,就弹出一个对话框....
可是摁了F1以后会弹出一堆对话框,而且对话框很奇怪的在屏幕右下角出现,请问大牛们这是怎么回事?
Assembly code
        .386        .model flat, stdcall        option casemap :none;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Include 文件定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>include        windows.incinclude        user32.incincludelib    user32.libinclude        kernel32.incincludelib    kernel32.lib;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Equ 等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ICO_MAIN    equ    1000DLG_MAIN    equ    1000;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        .data?hInstance    dd    ?hWinMain    dd    ?hHook        dd    ?;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        .data        szTest        db    'Test', 0        .code;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 钩子回调函数;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>HookProc    proc    _dwCode,_wParam,_lParam        local    @szKeyState[256]:byte        invoke    CallNextHookEx,hHook,_dwCode,_wParam,_lParam        pushad        .if    _dwCode == HC_ACTION            mov    ebx,_lParam            assume    ebx:ptr EVENTMSG            .if    [ebx].message == WM_KEYDOWN                mov    ecx, [ebx].paramL                and    ecx, 0ffh                .if    ecx == VK_F1                    invoke    MessageBox, hWinMain, addr szTest, \                        addr szTest, MB_OK                .endif            .endif            assume    ebx:nothing        .endif        popad        xor    eax,eax        retHookProc    endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_ProcDlgMain    proc    uses ebx edi esi hWnd,wMsg,wParam,lParam        mov    eax,wMsg;********************************************************************        .if    eax ==    WM_CLOSE            invoke    UnhookWindowsHookEx,hHook            invoke    EndDialog,hWnd,NULL;********************************************************************        .elseif    eax ==    WM_INITDIALOG            push    hWnd            pop    hWinMain            invoke    SetWindowsHookEx,WH_JOURNALRECORD,addr HookProc,hInstance,NULL            .if    eax                mov    hHook,eax            .else                invoke    EndDialog,hWnd,NULL            .endif;********************************************************************        .else            mov    eax,FALSE            ret        .endif        mov    eax,TRUE        ret_ProcDlgMain    endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>start:        invoke    GetModuleHandle,NULL        mov    hInstance,eax        invoke    DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL        invoke    ExitProcess,NULL;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        end    start
  相关解决方案