
给神舟 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 *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 编译后用 管理员权限就行了 多谢 |