纵观整个搜索引擎,这个样的主题文章也很多,就是没有自己亲自试着写写,现在就为大家说说吧(个人观点仅供参考),注册热键顾名思义就是把这个热键注册上去,怎么注册呢,其实人家微软大哥早就为我准备好了一个函数,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 更多资料)
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述