Я использую хуки и у меня есть vkCode и scanCode, поэтому я использую команду ToAscii () как таковую:
...
LPWORD wCharacter;
ToAscii(kbdStruct.vkCode, kbdStruct.scanCode, keyboard_state, wCharacter, 0);
Так что теперь wCharacter должен содержать символ Ascii правильно?
Как я могу распечатать это?
Я старался: printf(wCharacter);
но он говорит: «не может преобразовать« WORD * »в« const char * »»
Что я делаю неправильно? Как распечатать СЛОВО *? Или я неправильно выполнял команду ToAscii?
Большое спасибо.
WORD и ToAscii () — это стандартный C ++, поэтому ответить на этот вопрос довольно сложно. Однако в любом случае есть две проблемы:
Вы не собираетесь далеко продвигаться с этим, вы передаете неинициализированный указатель на ToAscii (). Правильный код должен выглядеть так:
WORD wCharacter[2];
int len = ToAscii(kbdStruct.vkCode, kbdStruct.scanCode, keyboard_state, wCharacter, 0);
if (len == 1) printf("%c", wCharacter[0]);
if (len == 2) printf("%c", wCharacter[1]);
Это должно скомпилировать и работать, несколько. На практике вы не можете получить это надежно. Передаваемая вами переменная * keyboard_state * должна быть состоянием клавиатуры процесса, которому принадлежит окно переднего плана. И вы должны обратить внимание на раскладку клавиатуры, которая активна для этого процесса (см. ToAsciiEx). Этого нельзя заставить работать с низкоуровневой клавиатурой. Клавиатурный регистратор должен использовать перехват WH_CALLWNDPROC вместо того, чтобы перехватывать сообщения WM_CHAR (я думаю, никогда не писал). много Труднее понять, что требует DLL, которая может быть внедрена в другие процессы. Вы, конечно, изобретаете колесо, покупайте, а не собирайте — это лучший совет. Также сделает ваши пользователи немного более комфортно о ваших намерениях.