我用控制台程序建个全局HOOK,想在截获到某个按键时可以使程序关闭该怎么做?

解决方案 »

  1.   

    hookkeyboard -> key == X 暴力terminateXXXX
      

  2.   

    退出程序么? -》exit(0)就OK啦
      

  3.   

    我在主代码里面加了消息循环代码如下:
    while (GetMessage(msg, NULL, 0, 0)) 
    {
    if(msg->message==WM_CLOSE) exit(0);
    }
    在DLL里的钩子处理函数中判断是否按下F2键,是的话就给程序发关闭消息
    if(VK_F2==wParam)
    {

    SendMessage(g_hWnd,WM_CLOSE,0,0);
    UnhookWindowsHookEx(g_hkeyboard);
    }
    结果是在控制台下按F2好像有时会退出有时又不会,而在其他窗口中按下F2时只会卸下钩子,
    也就是UnhookWindowsHookEx(g_hkeyboard)执行了,这是怎么回事?
      

  4.   

    又测试了一下,在其他窗口中按键都被屏蔽了,只有在控制台窗口中按下F2会解除屏蔽,不会结束程序
    主代码:
    #include <Windows.h>
    #include <Winbase.h>
    #include <iostream.h>
    #include <winuser.h>
    _declspec(dllimport) void SetHook(HWND hwnd);
    void main()
    {
    HWND m_hWnd;
    LPMSG msg;
    SetConsoleTitle("My God!"); 
    m_hWnd=FindWindow(NULL,"My God!"); 
            SetHook(m_hWnd);
    GetMessage(msg,NULL,NULL,NULL);
    while (GetMessage(msg, NULL, 0, 0)) 
    {
    if(msg->message==WM_CLOSE) exit(0);
    }
    }
    dll代码:
    #include <windows.h>
    HHOOK g_hkeyboard=NULL;
    HWND g_hWnd;
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    if(VK_F2==wParam)
    {

    SendMessage(g_hWnd,WM_CLOSE,0,0);
    //GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
    UnhookWindowsHookEx(g_hkeyboard);
    }
    return 1;
    }
    void SetHook(HWND hwnd)
    {
    g_hWnd=hwnd;
    g_hkeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll"),0);
    }