VCdog(狗)编程网

vc狗编程网希望你喜欢

博客园 首页 新随笔 联系 订阅 管理

纵观整个搜索引擎,这个样的主题文章也很多,就是没有自己亲自试着写写,现在就为大家说说吧(个人观点仅供参考),注册热键顾名思义就是把这个热键注册上去,怎么注册呢,其实人家微软大哥早就为我准备好了一个函数,RegisterHotKey这是一个API函数(以我看这个函数就是个定时器,当遇到用户按了预定义的按键,就会产生WM_HOTKEY消息,类似于时间到了该执行想要的代码)

函数原型如下

       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狗编程网(http://yaofande.s36.804.cn 更多资料)