VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1256|回复: 12

VC++基础班-[12]注册全局系统热键

[复制链接]
51_avatar_middle
online_admins 发表于 2018-1-22 20:16:32 | 显示全部楼层 |阅读模式
①、注册全局系统热键的优点:
即使程序的窗口不是当前活动窗口、或者窗口最小化、隐藏后,也都可以响应热键;
比如QQ软件的默认呼出热键:Ctrl+Alt+Z 就是注册了全局系统热键;

②、注册窗口全局系统热键的步骤:

1> 调用 RegisterHotKey 函数注册全局系统热键;
BOOL RegisterHotKey(
    HWND hWnd,
    int id,
    UINT fsModifiers,
    UINT vk
);
hWnd : 指定响应该热键的窗口句柄;
id : 热键的标识,有点类似于 SetTimer 中的标识,作用域为线程内;
fsModifiers : 指定组合键,这个值可以由 MOD_ALT、MOD_CONTROL、MOD_SHIFT、MOD_WIN 中的一个或几个组成;
vk : 指定热键的虚拟键盘码,如:'A'
备注:这里的 Ctrl+Alt+A 这个组合键的作用域是全局的;

示例:RegisterHotKey(m_hWnd, 1000, MOD_CONTROL|MOD_ALT, 'Q');

2> 响应目标窗口的 WM_HOTKEY 消息;
3> 调用 UnregisterHotKey 卸载热键:
BOOL UnregisterHotKey(
    HWND hWnd,
    int id
);
hWnd : 热键关联的窗口句柄;
id : 热键的标识;
可以放到对话框类的 OnDestroy() 函数中进行调用,这样模态与非模态对话框都可以成功的进行卸载;

==============================================
③、热键提高篇:注册线程全局热键,没有窗口;

④、线程全局热键的步骤:
1> 声明线程函数:static UINT __cdecl ThreadProc(LPVOID pParam);
成员函数作为线程函数:https://www.cctry.com/thread-19591-1-1.html

2> 调用MFC中的 AfxBeginThread 函数进行新工作线程的创建: AfxBeginThread(ThreadProc, this);
3> 线程函数的实现://跟大家说明一下id和key作用域的问题

3> 线程函数的退出:
因为 GetMessage 是阻塞的,没有消息的话,那么就会一直等待,直到返回为止,所以我们要加一个“后门”,让其可以退出;
使用的方法就是把 GetMessage 换成 PeekMessage,这个函数是异步的,所以没有消息也可以返回:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
教程在线观看地址:
https://www.bilibili.com/video/av39706341/?p=14
MP4高清视频下载地址:链接:https://pan.baidu.com/s/1ZqTsMNOIwV3F-fYnXjuuPA 提取码:zzad
本节课件下载(回复后可见):
游客,如果您要查看本帖隐藏内容请回复

备注:VIP会员可免费下载本站所有资源(点击查看)
提示:通过购买VC驿站U盘打包(点击查看)也可加入终身Vip会员^_^




上一篇:VC++基础班-[11]对话框程序响应组合按键
下一篇:VC++基础班-[13]控件自定义消息的响应
71_avatar_middle
在线会员 发表于 2018-1-23 11:11:43 | 显示全部楼层
每天学习一点点,谢谢syc
35_avatar_middle
在线会员 发表于 2019-2-8 13:25:23 | 显示全部楼层
qqq.3..............
95_avatar_middle
在线会员 发表于 2019-2-17 09:49:11 | 显示全部楼层
感谢老大的无私奉献
98_avatar_middle
在线会员 发表于 2019-2-23 11:14:25 | 显示全部楼层
谢谢分享 学习
06_avatar_middle
在线会员 发表于 2019-3-4 12:33:02 | 显示全部楼层
VC++基础班-[12]注册全局系统热键
94_avatar_middle
在线会员 发表于 2019-3-22 08:18:58 | 显示全部楼层
坚持学习[12]注册全局系统热键
56_avatar_middle
在线会员 发表于 2019-3-25 03:41:12 | 显示全部楼层
感谢老大的无私奉献
42_avatar_middle
在线会员 发表于 2019-3-30 12:13:06 | 显示全部楼层
VC++基础班-[12]注册全局系统热键
52_avatar_middle
在线会员 发表于 2019-4-1 17:29:00 | 显示全部楼层
谢谢分享,收藏!!!
74_avatar_middle
在线会员 发表于 2019-4-3 15:28:09 | 显示全部楼层
VC++基础班-[12]注册全局系统热键
98_avatar_middle
在线会员 发表于 2019-4-26 17:06:59 | 显示全部楼层
这个可以有,好好瞅瞅
87_avatar_middle
在线会员 发表于 2019-6-14 15:11:38 | 显示全部楼层
好评。。。。。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-7-17 13:30

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表