函数功能:该函数定义一个系统范围的热键。   函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk);   参数:
  hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY消息必须在消息循环中中进行处理。
  id:定义热键的标识符。调用线程中的其他热键不能使用同样的标识符。应用功能程序必须定义一个0X0000-0xBFFF范围的值。一个共享的动态链接库(DLL)必须定义一个0xC000-0xFFFF范围的值伯GlobalAddAtom函数返回该范围)。为了避免与其他动态链接库定义的热键冲突,一个DLL必须使用GlobalAddAtom函数获得热键的标识符。
  fsModifoers:定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的键。该参数可以是如下值的组合:
  MOD_ALT:按下的可以是任一Alt键。MOD_CONTROL:按下的可以是任一Ctrl键。
  MOD_SHIFT:按下的可以是任一Shift键。   MOD_WIN:按下的可以是任一Windows按键。这些键可以用Microsoft Windows日志记录下来。   MOD_NOREPEAT:Windows 7或者后续版本: 更改热键行为,以便键盘自动重复不会产生多个热键通知。
  vk:定义热键的虚拟键码。
  返回值:若函数调用成功,返回一个非O值。若函数调用失败,则返回值为0。若要获得更多的错误信息,可以调用GetLastError函数。
  备注:当某键被接下时,系统在所有的热键中寻找匹配者。一旦找到一个匹配的热键,系统将把WM_HOTKEY消息传递给登记了该热键的线程的消息队列。该消息被传送到队列头部,因此它将在下一轮消息循环中被移去。该函数不能将热键同其他线程创建的窗口关联起来。
  若为一热键定义的击键己被其他热键所定义,则RegisterHotKey函数调用失败。
  若hWnd参数标识的窗口已用与id参数定义的相同的标识符登记了一个热键,则参数fsModifiers和vk的新值将替代这些参数先前定义的值。
  Windows CE:Windows CE 2.0以上版本对于参数fsModifiers支持一个附加的标志位。叫做MOD_KEYUP。
  若设置MOD_KEYUP位,则当发生键被按下或被弹起的事件时,窗口将发送WM_HOTKEY消息。
  RegisterHotKey可以被用来在线程之间登记热键。

上面只是一个注册热键的过程,那么热键注册成功后呢,当用户按住热键的时候,它就会产生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

接收热键的方式(按照接收消息顺序):

1、重载PreTranslateMessage

virtual BOOL PreTranslateMessage(MSG* pMsg);

switch(pMsg->message)  {  case WM_HOTKEY:   MessageBox( _T("PreTranslateMessage 收到热键消息"));

......

2、自定义接收消息

ON_MESSAGE( WM_HOTKEY, &CHotKeyDlg::OnGetHotMsg )

afx_msg HRESULT OnGetHotMsg( WPARAM wParam, LPARAM lParam );

3、重载DefWindowProc

virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);

switch(message )  {  case WM_HOTKEY:   MessageBox( _T(" DefWindowProc 收到热键消息"));

最新文章

  1. jquery-懒加载技术(简称lazyload)
  2. java utils
  3. 在CentOS上安装并运行SparkR
  4. ural 1156. Two Rounds
  5. TI CC2541 BLE协议栈蓝牙MAC 地址
  6. ssh-copy-id帮你建立信任
  7. caption标签,为表格添加标题和摘要
  8. TinyMCE实现简单的本地上传
  9. requests模拟登录
  10. win彩 百款皮肤任选任换.可视化
  11. HTML编码规范、CSS编码规范
  12. Jason Wang: 结对编程 CountWord(第三次作业)
  13. UOJ#185. 【ZJOI2016】小星星 容斥原理 动态规划
  14. 雷林鹏分享:YAF路由问题
  15. Ajax 及里面的XStream《黑马程序员_超全面的JavaWeb视频教程vedio》
  16. linux apache2部署php
  17. Linux 查看磁盘分区、文件系统、磁盘的使用情况相关的命令和工具介绍
  18. IO流程及优化
  19. Android TextEdit属性
  20. .Net core 使用NPOI 直接导入Excel到数据库(即不先将Excel保存到服务器再读取文件到数据库)

热门文章

  1. PHP.30-TP框架商城应用实例-后台6-商品会员价格删除-外键,级联操作
  2. FIFO页面淘汰算法
  3. Android字体大小怎么自适应不同分辨率?
  4. Windows Phone 8.1 学习之路
  5. chromedriver版本支持的Chrome版本
  6. 【转载】Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放
  7. NGUI-Tweens
  8. corosync.conf
  9. 一个画ROC曲线的封装包
  10. Extjs msgTarget 提示位置