当前位置: 首页 > 工具软件 > Hotkey > 使用案例 >

RegisterHotKey 热键的使用

东郭宏朗
2023-12-01

简介:

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

使用起来只有三个步骤:

1.注册热键

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

3.解除注册热键

API介绍:

(具体消息参数含义,详细介绍等可以去msdn官网查看https://msdn.microsoft.com/en-us/library/ms646309.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();
}




 类似资料: