Я пытаюсь изменить клавиши, которые моя клавиатура отправляет приложениям. Я уже создал глобальный хук и могу запретить нужные мне ключи, но теперь я хочу отправить новый ключ на место. Вот моя процедура крюка:
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 (), но не могу понять, как создать LPARAM для WM_KEYUP или WM_KEYDOWN. Я также попробовал keybd_event (), который имитирует клавиши (я знаю, потому что этот обработчик ловушек ловит нажатие имитированных клавиш), включая 5 или 6 различных кодов сканирования, но ничто не влияет на мое окно переднего плана.
Я в основном пытаюсь превратить панель масштабирования на моем ms3200 в элемент управления прокруткой, поэтому я могу даже отправлять неправильные клавиши (ВВЕРХ и ВНИЗ).