MFC注册全局快捷键

原创 2017年01月03日 14:22:01

  • 注册全局快捷键 RegisterHotKey(m_hWnd,HotKeyId,MOD_ALT,VK_F2);
注意:A.第三个参数还可以是MOD_CONTROL|MOD_ALT,MOD_CONTROL来表示组合键
B.最后一个参数可以选择辅助键 VK_F1 -- VK_F10,或者是字母,但是字母只能是大写字母,小写字母不生效,经过测试的。

  • 添加WM_HOTKEY消息,生成函数OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
这里的nHotKeyId 对应于全局的HotKeyId。
代码如下:
OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
CView::OnHotKey(nHotKeyId, nKey1, nKey2);
if(nHotKeyId == HotKeyId )
{
...................
}

  • 注册全局快捷键 RegisterHotKey(m_hWnd,HotKeyId,MOD_ALT,VK_F2);

 注意:A.第三个参数还可以是MOD_CONTROL|MOD_ALT,MOD_CONTROL来表示组合键

       B.最后一个参数可以选择辅助键 VK_F1 -- VK_F10,或者是字母,但是字母只能是大写字母,小写字母不生效,经过测试的。


  • 添加WM_HOTKEY消息,生成函数OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)

这里的nHotKeyId 对应于全局的HotKeyId。

代码如下:

OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
 CView::OnHotKey(nHotKeyId, nKey1, nKey2);
 if(nHotKeyId == HotKeyId )
 {
 ...................

 }



官方文档如下:

当用户按完整系统快捷键时,框架调用该成员函数。

afx_msg void OnHotKey(
    UINT nHotKeyId, 
    UINT nKey1, 
    UINT nKey2
);

参数

说明

[in]nHotKeyId

生成消息的快捷键的标识符。  如果消息由一个SYSTEM中定义的快捷键生成的,此参数将为下列值之一:  

  • IDHOT_SNAPDESKTOP -的桌面快捷键按下了。

  • IDHOT_SNAPWINDOW -的windows快捷键按下了。

[in] nKey1

一个按位组合(或指示)的标志为按下的键与键的组合。nKey2 参数指定了。  可能的值包括:  

  • MOD_ALT -任何ALT键按下了。

  • MOD_CONTROL -任何CTRL键按下了。

  • MOD_SHIFT -任何SHIFT键按下了。

  • MOD_WIN -任何Windows键按下了。  这些键标记与Microsoft Windows徽标。  

[in] nKey2

快捷键的虚键控代码。

Unregister热键

  • void  CMyEdit2::OnDestroy()   
  • {  
  •     CEdit::OnDestroy();  
  •   
  •     //Unregister热键   
  • #ifdef _DEBUG      
  •     int  nRet = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[0]);   
  •     if (!nRet)  
  •         AfxMessageBox(_T("UnregisterHotKey 0 false" ));  
  •     nRet = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[1]);   
  •     if (!nRet)  
  •         AfxMessageBox(_T("UnregisterHotKey 1 false" ));  
  • #else   
  •     UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[0]);   
  •     UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[1]);   
  • #endif   
  •   
  • }  
  • void CMyEdit2::OnDestroy()   
  • {  
  •     CEdit::OnDestroy();  
  •     //Unregister热键   
  • #ifdef _DEBUG      
  •     int nRet = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[0]);   
  •     if(!nRet)  
  •         AfxMessageBox(_T("UnregisterHotKey 0 false"));  
  •     nRet = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[1]);   
  •     if(!nRet)  
  •         AfxMessageBox(_T("UnregisterHotKey 1 false"));  
  • #else   
  •     UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[0]);   
  •     UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID[1]);   
  • #endif   
  • }  


版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC实现全局热键

要想使用全局热键的话,需要用到两个函数: BOOL WINAPI RegisterHotKey( __in_opt HWND hWnd, __in int id, __...
  • ccfxue
  • ccfxue
  • 2016年05月10日 16:53
  • 1117

Windows编程实现自定义全局热键

一、实现全局热键主要使用以下API(详情查看MSDN):- 获取热键标识:GlobalAddAtom - 注册热键:RegisterHotKey - 注销热键:UnregisterHotKey - 释...
  • zhoufuxinzfx
  • zhoufuxinzfx
  • 2016年03月09日 16:22
  • 2840

[JNI]用JAVA实现全局快捷键

基本思路:使用WIN API实现一个底层键盘钩子,监听按键事件。如果需要的快捷键被触发,则弹出相应的窗口。 找到了http://www.jotschi.de/?p=90 这个代码基本上实现了我的要...
  • ycb1689
  • ycb1689
  • 2013年03月05日 11:44
  • 1942

章鱼哥出品—VB.NET 自定义快捷键使用详解之全局热键

如何设置VB.NET 窗体的全局热键(快捷键),
  • zhangyubishoulin
  • zhangyubishoulin
  • 2014年10月06日 01:49
  • 4204

C#全局热键设置与窗体热键设置实例

1、窗体热键 首先要设置主窗体KeyPreview为true,可直接在属性中进行设置, 或者在窗体加载中设置: this.KeyPreview = true; 然后添加窗体KeyDown事件,如...
  • cuoban
  • cuoban
  • 2016年02月26日 16:16
  • 3387

Delphi使用全局快捷键

Delphi使用全局快捷键 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Gra...
  • gjtao1130
  • gjtao1130
  • 2013年08月08日 14:18
  • 2410

如何实现全局热键

要实现系统范围内的热键
  • wwkaven
  • wwkaven
  • 2014年06月14日 12:39
  • 2286

windows 设置全局快捷键;

简单设置全局快捷键: 组合键win+R 打开控制面板,小图表显示下 点击 管理工具项, 将自己想要谁知快捷键的程序的快捷方式放进去,(需要确认管理员权限) 如图,第...
  • csdn_Joker
  • csdn_Joker
  • 2016年11月27日 16:09
  • 4221

MFC学习之路01 快捷键的生成方法

快捷键一般都是使用在CMenu中,所以有的Menu创建过程(此处省略)。 1、切换到资源视图->添加资源->Acclerator 2、在ID中选择需要添加快捷键的控件ID,修饰符中选择Ctrl等,...
  • t1234xy4
  • t1234xy4
  • 2015年07月16日 17:14
  • 919

C#实现全局快捷键(系统热键)响应(转)

在应用中,我们可能会需要实现像Ctrl+C复制、Ctrl+V粘贴这样的快捷键,本文简单介绍了它的实现,并给出了一个实现类。 (1)建立一个类文件,命名为HotKey.cs,代码如下:...
  • zxj19951029
  • zxj19951029
  • 2014年10月18日 23:43
  • 458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC注册全局快捷键
举报原因:
原因补充:

(最多只允许输入30个字)