我正在嘗試更改我的鍵盤發送給應用程序的鍵。我已經創建了一個全局鉤子,可以阻止我想要的密鑰,但是我現在想要發送一個新的密鑰。這裏是我的鉤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上的縮放欄變成滾動控件,所以我甚至可能會發送錯誤的按鍵(向上和向下)。