我在PreTranslateMessage函数中能够得到单个按键的扫描码,但是如何得到这些组合键了?

解决方案 »

  1.   

    利用hook中的键盘hook:
    先在程序初始化时设一个hook
    SetWindowsHookEx(WH_KEYBOARD_LL,        // hootype
      HOOKPROC LowLevelKeyboardProc,     // hook procedure回调函数
      HINSTANCE hMod,    // handle to application instance
      DWORD dwThreadId  ) // thread identifier
    在回调函数中
    CALLBACK LowLevelKeyboardProc(
      int nCode,     // hook code
      WPARAM wParam, // message identifier
      LPARAM lParam  // message data)
    {
    if(nCode == HC_ACTION)
    {
         ...
         lParam->scanCode;大概就是这个样子。lparam指向的tagKBDLLHOOKSTRUCT 可以在msdn中查到
         ...
    }
    CallNextHookEx(....);
      

  2.   

    在你的资源中增加Accelerator:IDR_MYHOTKEY,里面加入ctrl-c热键。
    在程序初始化的地方:
    m_hHotKey =LoadAccelerators( AfxGetInstanceHandle(), IDR_MYHOTKEY); 
    在PreTranslateMessage中:
    if(m_hHotKey != NULL)
    {
     if(!TranslateAccelerator(m_hWnd,m_hHotKey,pMsg))
       return CDialog::PreTranslateMessage(pMsg);
     else
      return TRUE;
    }在OnCommand中响应ctrl-c
    if( LOWORD(wParam) == IDC_CTRLC )
    ...