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