キーボードがアプリケーションに送信するキーを変更しようとしています。すでにグローバルフックを作成していて、必要なキーを防ぐことができますが、新しいキーを所定の場所に送信したいと思います。これが私のフック手順です:
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);
}
GetFocus()およびGetForegroudWindow()でSendMessageおよびPostMessageを使用しようとしましたが、WM_KEYUPまたはWM_KEYDOWNのLPARAMを作成する方法がわかりません。また、keybd_event()も試しました。これは、5つまたは6つの異なるスキャンコードを含むキーをシミュレートします(このフックプロシージャはシミュレートされたキーの押下をキャッチするためです)が、フォアグラウンドウィンドウには何も影響しません。
基本的に、ms3200のズームバーをスクロールコントロールに変えようとしているので、間違ったキー(UPとDOWN)を送信している可能性があります。