用RegisterHotKey注册系统热键
函数功能:该函数定义一个系统范围的热键。 函数原型: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 收到热键消息"));
转载于:https://www.cnblogs.com/wumac/p/4110694.html
用RegisterHotKey注册系统热键相关推荐
- C#注册系统热键F2、F3自动输入魔兽秘籍
打游戏的时候随手想到要是自动输入whoisdaddy.greedisgood 1000000多方便. 文章目录 HotKey.cs from1.cs代码 最终效果 HotKey.cs 主要实现类 us ...
- QT 如何注册系统热键,类似 Windows上的RegisterHotKey函数一样
下载库: http://doc.libqxt.org/tip/qxtglobalshortcut.html 在linux下编译安装,ubuntu9.10上会报找不到X11/libx.h,执行命令apt ...
- C#中调用API函数RegisterHotKey注册多个系统热键
转自:http://www.kkee.cn/article.asp?id=84要设置快捷键必须使用user32.dll下面的两个方法. BOOL RegisterHotKey( //注册系统热键的AP ...
- RegisterHotKey设置系统级热键《转》
BOOL RegisterHotKey( HWND hWnd, //响应该热键的窗口句柄 Int id, //该热键的唯一标识 ...
- 对VB注册全局热键的思考——是不是RegisterHotKey的1个ID可以注册多组热键?
最近在网络上看到用VB注册热键的代码,试了下,觉得很好用.经过一番分析,我又简化了一下源代码,把没有必要的代码删去,还是能成功.由此引发了一些思考,是不是RegisterHotKeyr的1个ID可以注 ...
- C# 系统热键注册代码
为程序制定快捷键.很多软件都带热键功能的,通过以下方式可以实现2个键或3个键的快捷键. 先引用using System.Runtime.InteropServices; 的命名空间, 然后在合适的位置 ...
- 拍牌神器是怎样炼成的(三)---注册全局热键
要想在上海拍牌的超低中标率中把握机会.占得先机,您不仅需要事先准备好最优的竞拍策略,还要制定若干套应急预案,应对不时之需.既定策略交给计算机自动执行,没有问题.可是谁来召唤应急预案呢?使用全局热键应该 ...
- python3 全局热键_python3注册全局热键的实现
之前用python3做游戏自动化脚本,用过很多东西,然后最终有一套完整的方案.在这里随便阐述一下核心思路: 游戏辅助的窗体设计方面: 不需要pyqt这种大型软件,写小工具用自带的tkinter就行了. ...
- python3注册全局热键
之前用python3做游戏自动化脚本,用过很多东西,然后最终有一套完整的方案.在这里随便阐述一下核心思路: 游戏辅助的窗体设计方面: 不需要pyqt这种大型软件,写小工具用自带的tkinter就行了. ...
最新文章
- Dynamics CRM中的操作(action)是否是一个事务(transaction)?
- 成功解决NameError: name 'apply' is not defined
- 微信公众号开发扫码登录(java版)
- 清华学霸直博简历:CPU、操作系统、编译器全自主写
- 在C#中嵌入Flash对象时遇到未能导入activex 控件的问题
- 程序员,岂能被网站吞吐量难住?
- python迭代器和生成器_Python迭代器与生成器
- jQuery - 自定义插件开发方式
- Mac 下更新 .bash_profile 文件
- git idea提交代码的步骤
- Volatility3 windows插件详解
- virtualxposed使用教程_无需Root也能使用Xposed框架 —— VirtualXposed v0.14.5
- UPC 6615 Snuke Festival
- Jenkins执行shell命令,提示Pseudo-terminal will not be allocated because stdin is not a terminal.
- python画布组件_Python Tkinter 画布(Canvas)
- 知钱俱乐部 php,知钱俱乐部
- 父亲节手抄报内容大全
- 内网穿透是什么?哪些作用?
- 打卡系列-剑指 Offer 62. 圆圈中最后剩下的数字
- Word 参考文献管理 - 交叉引用 + 批量修改上标