如何在 windows10 里稳定地屏蔽特定按键(Volume_Down)?

2018-05-06 12:33:48 +08:00
 Rheinmetal

给神舟 K580S 笔记本升级 Win10 发现音量迅速降低到 0 而且左上角一直出现调整音量的 Tooltip 搜了一圈结果是 BIOS 的锅 按 Fn+F7 就会一直触发 Volume_Down 在 Win10 下不知道怎么回事 系统启动后就会一直触发

先试了一句 ahk Volume_Down::return 可是一按 Ctrl Shift Alt Win 就失效 因为 ahk 接收到的是组合键 要是屏蔽全部 16 种组合 Ctrl Shift Alt Win 四个键又都不能用了

最后用 low level keyboard hook 改了 so 上的代码 把有 volume down 的事件吃掉

#include <Windows.h>

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

	BOOL fEatKeystroke = FALSE;

	if (nCode == HC_ACTION)
	{
		switch (wParam)
		{
		case WM_KEYDOWN:
		case WM_SYSKEYDOWN:
		case WM_KEYUP:
		case WM_SYSKEYUP:
			PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
			fEatKeystroke = (p->vkCode == VK_VOLUME_DOWN); //Eat up Volume Down Key
			break;
		}
	}
	return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}
int main()
{
	// Install the low-level keyboard & mouse hooks
	HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
	// Keep this app running until we're told to stop
	MSG msg;
	while (!GetMessage(&msg, NULL, NULL, NULL)) {    //this while loop keeps the hook
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	UnhookWindowsHookEx(hhkLowLevelKybd);
	return(0);
}

这个方法有时会失效 就是有几秒没有屏蔽 然后又恢复 是不是权限的问题? 是不是需要其它更底层的方法 比如写驱动?

2531 次点击
所在节点    问与答
8 条回复
razerhell
2018-05-06 12:59:48 +08:00
自己写一个钩子截获目标按键?
silymore
2018-05-06 14:10:06 +08:00
Rheinmetal
2018-05-06 14:22:01 +08:00
@razerhell 这不就是我写的钩子
levie
2018-05-06 14:30:21 +08:00
*Volume_Down::return
Rheinmetal
2018-05-06 17:00:48 +08:00
@levie 不行的 Ctrl Alt 怎么办?
daigouspy
2018-05-06 17:05:40 +08:00
把那个键抠出来不就得了?
des
2018-05-06 17:09:01 +08:00
去 BIOS 设置,交换 fn 和功能键??
Rheinmetal
2018-05-06 18:07:46 +08:00
@levie 这个 ahk 编译后用 管理员权限就行了 多谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452514

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX