我正在尝试更改键盘发送到应用程序的键。我已经创建了一个全局挂钩并且可以阻止我想要的密钥,但我现在想发送一个新密钥。这是我的钩子过程:
LRESULT __declspec (dllexport) HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
int ret;
if(nCode < 0)
{
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
kbStruct = (KBDLLHOOKSTRUCT*)lParam;
printf("\nCaught [%x]", kbStruct->vkCode);
if(kbStruct->vkCode == VK_OEM_MINUS)
{
printf(" - oem minus!");
keybd_event(VK_DOWN, 72, KEYEVENTF_KEYUP, NULL);
return -1;
}
else if(kbStruct->vkCode == VK_OEM_PLUS)
{
printf(" - oem plus!");
keybd_event(VK_UP, 75, KEYEVENTF_KEYUP, NULL);
return -1;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
我已经尝试将 SendMessage 和 PostMessage 与 GetFocus() 和 GetForegroudWindow() 一起使用,但无法弄清楚如何为 WM_KEYUP 或 WM_KEYDOWN 创建 LPARAM。我还尝试了 keybd_event(),它确实模拟了按键(我知道是因为这个钩子 proc 捕获了模拟的按键),包括 5 或 6 个不同的扫描代码,但没有任何影响我的前台窗口。
我基本上是想将我的 ms3200 上的缩放栏变成滚动控件,所以我什至可能发送了错误的键(向上和向下)。