Я пытаюсь создать быстрый фрагмент кода, чтобы зафиксировать последовательность клавиш, отправленных одной из кнопок «горячих клавиш» на моем планшете, и перепрограммировать ее функцию.Кнопка отправляет LWin + LCtrl + Tab при нажатии.
После поиска в течение некоторого времени я решил попробовать использовать хук WH_KEYBOARD_LL, но через несколько часов я все еще не могу заставить хук работать, позвольтеодна действительная функциональность.
В настоящее время у меня есть следующее:
// TestHook2.cpp
#include "stdafx.h"
HHOOK hook;
BOOL gotKey;
LRESULT WINAPI KeyTrap(int, WPARAM, LPARAM);
BOOL CtrlHandler(DWORD);
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);
HMODULE currentProcess = GetModuleHandle(NULL);
hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyTrap, currentProcess, 0);
if (!hook) {
printf("No hook, quitting!\n");
return 1;
}
while(1) {
if(gotKey) printf("Got Key!\n");
gotKey = FALSE;
}
return 0;
}
LRESULT CALLBACK KeyTrap(int nCode, WPARAM wParam, LPARAM lParam)
{
gotKey = TRUE;
return CallNextHookEx(hook, nCode, wParam, lParam);
}
BOOL CtrlHandler(DWORD fdwCtrlType)
{
if (fdwCtrlType == CTRL_C_EVENT)
{
printf("Got CTRL+C, unhooking...\n");
UnhookWindowsHookEx(hook);
}
return FALSE;
}
Дескриптор, возвращаемый SetWindowsHookEx, определенно не равен NULL, но по какой-то причине KeyTrap НИКОГДА не вызывается вообще, независимо отсколько клавиш я пытаюсь нажать.Я также пытался поместить обратный вызов в DLL и использовать LoadLibrary во время выполнения, но это также дает точно такой же результат.
Я новичок во всем этом программировании Win32, так что вполне может бытьочень глупая ошибка.
Большое спасибо!
(PS: код работает на Win7. В настоящий момент нет доступа к реальной клавиатуре, но пытался генерировать нажатия клавиш на экранной клавиатуре, удаленный (RDP) ввод и аппаратные горячие клавиши на планшете. Может ли это быть проблемой?)