RegisterHotKey 热键的使用

RegisterHotKey 热键的使用简介 简单的说就是全局快捷键 你的程序启动后注册热键到指定窗口 以后如果用户按下你注册的热键 你的指定窗口就会收到 WM HOTKEY 消息通知 进而进行处理 使用起来只有三个步骤 1 注册热键 2 在 WM HOTKEY 通知中进行逻辑处理 3 解除注册热键 API 介绍 具体消息参数含义 详细介绍等可以去 msdn 官网查看 https msdn microsoft com en

简介:

简单的说就是全局快捷键,你的程序启动后注册热键到指定窗口,以后如果用户按下你注册的热键,你的指定窗口就会收到WM_HOTKEY消息通知,进而进行处理。

使用起来只有三个步骤:

1.注册热键

2.在WM_HOTKEY通知中进行逻辑处理

3.解除注册热键

API介绍:

(具体消息参数含义,详细介绍等可以去msdn官网查看https://msdn.microsoft.com/en-us/library/ms.aspx)

BOOL RegisterHotKey( HWND hWnd, //响应该热键的窗口句柄,如果为空,则注册到调用线程上 Int id, //该热键的唯一标识 UINT fsModifiers, //该热键的辅助按键 UINT vk //该热键的键值 ); 

解除注册热键

BOOL WINAPI UnregisterHotKey( _In_opt_ HWND hWnd,//热键注册的窗口 _In_ int id//要解除注册的热键ID );

详细使用步骤:

新建一个基本对话框,直接完成

注册热键

BOOL CXXDlg::OnInitDialog()
{
……
……

RegisterHotKey(GetSafeHwnd(),WM_MYHOTKEY,MOD_CONTROL|MOD_ALT,’X’);
//这里定义的快捷键是”Alt+Ctrl+X”
return true;
}

添加消息映射

(a)定义响应函数

在XXDlg.h中
class CXXDlg : public CDialog
{
…….
……

afx_msg HRESULT OnHotKey(WPARAM wParm,LPARAM lParam);
//这里使用函数OnHotKey,名字可随便改,但格式是固定的
DECLARE_MESSAGE_MAP()
}

(b)捆绑消息

在XXDlg.cpp中
BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
ON_WM_SYSCOMMAND()
…….
…….

ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()
WM_HOTKEY是系统定义的热键消息,OnHotKey是所要调用的函数

编写响应函数

在XXDlg.cpp中最后添加
HRESULT CXXDlg::OnHotKey(WPARAM wParm,LPARAM lParam)
{
if (wParm==WM_MYHOTKEY)
{
CString str;
str.Format(“ID:%d lParam:%08x  h:%x l:%x”,
wParm,lParam,HIWORD(lParam),LOWORD(lParam));
AfxMessageBox(str);
}
return true;
}
//这里只是将一些信息显示处理,想干什么可以自己改

注销消息

使用类向导(MFC ClassWizard)添加DestroyWindow消息
添加函数
BOOL CXXDlg::DestroyWindow() 
{

UnregisterHotKey(GetSafeHwnd(),WM_MYHOTKEY);
return CDialog::DestroyWindow();
}





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206333.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午3:57
下一篇 2026年3月19日 下午3:57


相关推荐

  • PHP如何实现百万级数据导出

    PHP如何实现百万级数据导出

    2021年11月3日
    53
  • 树莓派连接到WiFi并用ssh连接

    树莓派连接到WiFi并用ssh连接硬件:树莓派zerow;系统:2019-09-26-raspbian-buster-lite;1、在/boot/目录下创建文件wpa_supplicant.conf,如下,即可连接到WiFi;country=CNctrl_interface=DIR=/var/run/wpa_supplicantGROUP=netdevupdate_config=1network={…

    2022年5月26日
    45
  • java 反射getmethod_Java 反射机制中 getMethod()和getDeclaredField()区别

    java 反射getmethod_Java 反射机制中 getMethod()和getDeclaredField()区别今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类方法时,发生NoSuchMethodException异常,后来上网发现getMethod()调用公共方法,不能反射调用私有方法,后来找到getDeclaredField()能够访问本类中定义的所有方法。后来用这个方法解决了我遇到的问题。我查了javaapi文档,其中详细说明如下:…

    2025年12月6日
    5
  • React 路由详解(超详细详解)

    React 路由详解(超详细详解)ReactReact路由对SPA的理解1.单页Web应用(singlepagewebapplication,SPA)。2.整个应用只有一个完整的页面。3.点击页面中的链接不会刷新页面,只会做页面的局部更新。4.数据都需要通过ajax请求获取,并在前端异步展现。路由的理解1.什么是路由1.一个路由就是一个映射关系(key:value)2.key为路径,value可能是function或component2.路由分类1.后端路由:1)理解:value是fun

    2022年4月28日
    51
  • 运维面试题整理

    运维面试题整理文章目录原题前言1.Nginx反向代理配置,此类urlwww.abc.com/refuse,禁止访问,返回4032.如何使用iptables将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0:3.如何查看Linux系统当前的状态,cpu内存的使用情况及负载4.nginx如何重定义或者添加发往后端服务器的请求头5.编写shell脚本,将当前目录下大于10K的文件转移到/tmp目录下6.写出你所了解的门户网站的服务架构,可用什么方式实现的高可用、负

    2022年6月11日
    31
  • 如何解析域名?

    如何解析域名?

    2021年9月20日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号