楼主,你能用键盘钩子设置了一个空格按钮隐藏当前程序到后台,那么把这个这个钩子改一下,让它可以监听所有的键盘按键,不单单是自己的程序HHOOK g_KeyBoarHook = SetWindowsHookEx(WH_KEYBOARD_LL, MyKeyboard, GetModuleHandle(NULL),0 );你看行不行

解决方案 »

  1.   

    按照你的方法,我写的:
    HHOOK g_KeyBoard=NULL;LRESULT CALLBACK KeyBoardProc(int code,
      WPARAM  wParam,
      LPARAM  lParam
      )
    {
    if(VK_SPACE==wParam)
    {
    ::ShowWindow(g_hWnd,SW_HIDE);
    }
    return 1;
    }在初始化后面写:
    g_KeyBoard=SetWindowsHookEx(WH_KEYBOARD_LL,KeyBoardProc,GetModuleHandle(NULL),0);运行结果是空格键实现不了功能了,甚至其他按钮都失效了,例如我开程序的时候,在这个论坛用回车换行都不行了
      

  2.   

    系统热键就可以了吧
    http://hi.baidu.com/weightbomb/item/430f773c40c6135b80f1a7bb
      

  3.   

     在 CTestHotkeyDlg特定的地方中调用
    RegisterHotKey(this->m_hWnd,1000,MOD_CTRL|MOD_ALT,'Q');请问这句话怎么理解。。汗。。
    HOOK钩子里面是在钩子声明下面直接{}中写,这个在哪写
      

  4.   

    很抱歉,没测试过就发给你。现改好试过才发.
    HHOOK g_KeyBoarHook = NULL;LRESULT CALLBACK MyKeyboard( int nCode, WPARAM wParam, LPARAM lParam)
    {
    if( nCode == HC_ACTION )
    {
    PKBDLLHOOKSTRUCT pKeyboardHookStruct = (PKBDLLHOOKSTRUCT)lParam;
    if(wParam == WM_KEYDOWN)
    {
    switch( pKeyboardHookStruct->vkCode )
    {
    case VK_SPACE:
    afxDump<<_T("VK_SPACE\n");
    break;
    default:
    break;
    }
    }
    }
    return CallNextHookEx( g_KeyBoarHook, nCode, wParam, lParam );
    }BOOL CMy22Dlg::SetHook()
    {
    g_KeyBoarHook = SetWindowsHookEx( WH_KEYBOARD_LL, MyKeyboard, NULL, 0); if( g_KeyBoarHook )
    {
    return TRUE;
    }
    return FALSE;
    }BOOL CMy22Dlg::DeleteHook()
    {
    if( UnhookWindowsHookEx( g_KeyBoarHook) )
    {
    return TRUE;
    } return FALSE;
    }CMy22Dlg::CMy22Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CMy22Dlg::IDD, pParent)
    {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetHook();
    }CMy22Dlg::~CMy22Dlg()
    {
    DeleteHook();
    }
      

  5.   


    多谢,按照你的写了。但是空格键没有任何反应,
    我还修改了你的一句代码:
    LRESULT CALLBACK MyKeyboard( int nCode, WPARAM wParam, LPARAM lParam)
    {
        if( nCode == HC_ACTION )
        {
            PKBDLLHOOKSTRUCT pKeyboardHookStruct = (PKBDLLHOOKSTRUCT)lParam;
            if(wParam == WM_KEYDOWN)
            {
                switch( pKeyboardHookStruct->vkCode )
                {
                case VK_SPACE:
    MessageBox(NULL, "11111", "提示", MB_OK);
                    //afxDump<<_T("VK_SPACE\n");
                    break;
                default:
                    break;
                }
            }
        }
        return CallNextHookEx( g_KeyBoarHook, nCode, wParam, lParam );
    }
    这个MessageBox没有跳出来,不知道你那边出现了什么结果