我正在尝试更改我的键盘发送给应用程序的键。我已经创建了一个全局钩子,可以阻止我想要的密钥,但是我现在想要发送一个新的密钥。这里是我的钩PROC:如何模拟按键到当前聚焦的窗口?
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(),它可以模拟键(我知道,因为这个钩子程序捕获了模拟按键),包括5或6个不同的扫描代码,但是没有影响我的前景窗口。
我基本上试图把我的ms3200上的缩放栏变成滚动控件,所以我甚至可能会发送错误的按键(向上和向下)。