8.4热键

钩子函数+消息队列:

新建个项目,设置dll输出

WH_KEYBOARD和WH_KEYBOARD_LL的区别
HOOK 低层键盘消息WH_KEYBOARD_LL
VirtualKeyboard虚拟键值表(详细介绍)
KBDLLHOOKSTRUCT (winuser.h) - Win32 apps | Microsoft Learn
钩子教程 - 原理(二十九) : 结构体 – KBDLLHOOKSTRUCT

鼠标键盘钩子-组合键监测 - 知乎 (zhihu.com)

接口_kbhk_Init和_kbhk_Close:
extern "C" __declspec(dllexport) BOOL _kbhk_Init(HINSTANCE hInst, CWnd *pWnd);
extern "C" __declspec(dllexport) void _kbhk_Close();

真正有用的函数:SetWindowsHookEx
BOOL _kbhk_Init(HINSTANCE hInst, CWnd *pWnd)
{
	g_pWnd = pWnd;
	g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardHookProc,hInst,NULL);
	return g_hHook == NULL ? FALSE : TRUE;
}

UnhookWindowsHookEx清除钩子
void _kbhk_Close()
{
	BOOL bResult=FALSE;
	if (g_hHook)
	{
		bResult= UnhookWindowsHookEx(g_hHook);
		if(bResult)
			g_hHook=NULL;
	}
}

使用winbase.h中的键盘键值(主要是命名方式很标准)。https://blog.csdn.net/qq_42372031/article/details/105178789

CALLBACK:KeyboardHookProc函数
在这里插入图片描述

组合键:

鼠标键盘钩子-组合键监测 - 知乎 (zhihu.com)

scancode表

热键在CPP实现起来只有三个步骤:

RegisterHotKey 热键的使用_Barry__的博客-CSDN博客

1.注册热键 UINT值 RegHotKey一般在界面初始化中,按照键值表键盘键值对应表 - horane.jo - 博客园 (cnblogs.com)

2.类向导添加WM_HOTKEY消息(BEGIN_MESSAGE_MAP会定义ON_WM_HOTKEY();定义afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)函数;),OnHotKey函数进行热键的逻辑处理

3.解除注册热键 UNRegHotKey 不想用的时候调用这个,和settimer、killtimer一样

读ReadHotKeyIni配置获取用户设置的键值:

配置热键界面ReadHotKeyIni读配置(CSetHotKeyDlg)
配置文件放键值。初始化读配置文件,按照键值表界面显示文字(SetHotToEdit)
点击确定存键值(UNIT)到配置文件。(SetEditToHot)

可以使用hook,在配置界面类似于apex自定义键位的方式点击热键编辑框,点击ctrl键会显示ctrl+到编辑框中,附上一些判错,而不是文字输入ctrl+1这种。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值