微信电脑版的Alt+A截图,相比大家一定都用过。只要 微信在电脑上没有关闭,即使微信窗口被缩放到最小或者最小化到托盘状态,都能通过这个快捷键使用截图功能,那这样的功能是如何实现的呢。这个快捷键实际上输入Windows系统中的热键注册。我们可以使用RegisterHotKey
注册一个系统级别的热键。当用户按下热键的时候,Windows会将WM_HOTKEY
消息发送给线程所在的窗口过程函数。 只要当前窗口未被关闭或者当前线程未退出。始终可以接收快捷键。控制台程序也可以注册热键。
在win32程序中我们可以在WM_CREATE
消息中注册热键,然后在WM_HOTKEY
消息中处理具体的业务逻辑。
case WM_CREATE:
{
RegisterHotKey(hwnd, 1018, MOD_ALT, VK_F1);
return 0;
}
case WM_HOTKEY:
{
//处理系统热键的逻辑
return 0;
}
以上代码我注册了一个ALT+F1
快捷键,启动窗体之后,只要该窗体未被关闭,通过ALT+F1
就可以收到 WM_HOTKEY
消息,我们可以在WM_HOTKEY
中实现我们自己的业务逻辑。
当然微软官方 也给我们提供了一个标准的用法,官方地址为:https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-registerhotkey
#include "stdafx.h"
int _cdecl _tmain (
int argc,
TCHAR *argv[])
{
if (RegisterHotKey(
NULL,
1,
MOD_ALT | MOD_NOREPEAT,
0x42)) //0x42 is 'b'
{
_tprintf(_T("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n"));
}
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
if (msg.message == WM_HOTKEY)
{
_tprintf(_T("WM_HOTKEY received\n"));
}
}
return 0;
}