给神舟 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);
}
这个方法有时会失效 就是有几秒没有屏蔽 然后又恢复 是不是权限的问题? 是不是需要其它更底层的方法 比如写驱动?
1
razerhell 2018-05-06 12:59:48 +08:00 via iPhone
自己写一个钩子截获目标按键?
|
2
silymore 2018-05-06 14:10:06 +08:00 via iPhone
修
|
3
Rheinmetal OP @razerhell 这不就是我写的钩子
|
4
levie 2018-05-06 14:30:21 +08:00 1
*Volume_Down::return
|
5
Rheinmetal OP @levie 不行的 Ctrl Alt 怎么办?
|
6
daigouspy 2018-05-06 17:05:40 +08:00 via Android
把那个键抠出来不就得了?
|
7
des 2018-05-06 17:09:01 +08:00 via Android
去 BIOS 设置,交换 fn 和功能键??
|
8
Rheinmetal OP @levie 这个 ahk 编译后用 管理员权限就行了 多谢
|