MFC怎么知道一个热键有没有被注册?

如题所述

第1个回答  2015-09-01
       BOOL RegisterHotKey(
                HWND hWnd,         // handle to window
                int id,              // hot key identifier
                UINT fsModifiers,  // key-modifier options
                UINT vk             // virtual-key code);  说明:  第一个参数指定接收WM_HOTKEY消息的窗体句柄
第二个参数热键标识,代表这个热键的唯一ID,应用程序中的标识值在0x0000和0xbfff之间,DLL中的在0xc000和0xffff之间
第三个参数 指的是附加按键的修改,比如说你按住了CTRL键,这里的值可以选择MOD_ALT,MOD_CONTROL,MOD_SHIFT,MOD_WIN,MOD_KEYUP
  第四个参数指的是按键的虚拟码 (这里你可以查找具体的msdn)
  上面只是一个注册热键的过,那么热键注册成功呢,当用户按住热键的时候,它就会产生WM_HOTKEY消息(也就是说时间到了,该执行代码了),那么我们的还要处理这个消息来为自己所用,假如用户按住热键我打算让他弹出个对话框,我们可以这样处理这个消息,如果你用的是MFC设计软件
,那么你可以在 PreTranslateMessage(MSG* pMsg)函数中截获WM_HOTKEY消息,代码如下{       // TODO: Add your specialized code here and/or call the base class        switch(pMsg-message)
       {
       case WM_HOTKEY: //截获这个消息来处理自己想要的结果 
              {
              if (pMsg-wParam==(这里是你注册时的热键ID,也是唯一的))
                     {
                            MessageBox("Test is 成功");
                     }
                break;
              }
       default:          //默认的处理
           break;
       }
       return CDialog::PreTranslateMessage(pMsg);}  剩下的工作就是反注册热键(意思就是注销这个热键),在程序关闭的时候写入下列代码,我是在OnClose中写的 ,你也可以在OnDestroy中写,
  UnregisterHotKey(m_hWnd,(注册时的ID)); //这个函数也是个API函数,第一个参数是说明你要注销哪个窗口句柄的热键,第二个参数说明是你开始注册的唯一ID
  其实不管是你做任何事情,都要遵循一个顺序,一般都是有一定的规律的,操作系统即使这样复杂,但是里面的东西还是一点点拼凑起来的,并且每一个东西都是有一定的规律的,只要你自己能钻研,我想没有说明难处的来源:VC狗编程网追问

回答没任何用处我就不说啥了, 你还给我搞个中英结合的代码........

第2个回答  2015-09-01
如果热键被注册过,那么你注册时 会报错的。追问

咋报错? 用GetLastError会返回几?

追答

若为一热键定义的击键己被其他热键所定义,则RegisterHotKey函数调用失败。

返回值:若函数调用成功,返回一个非O值。若函数调用失败,则返回值为0。若要获得更多的错误信息,可以调用GetLastError函数。

追问

那如果热键被占用了GetLastError会返回几?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网