клавиатура — C ++ printf WORD * (ToAscii)

Я использую хуки и у меня есть vkCode и scanCode, поэтому я использую команду ToAscii () как таковую:

...
LPWORD wCharacter;
ToAscii(kbdStruct.vkCode, kbdStruct.scanCode, keyboard_state, wCharacter, 0);

Так что теперь wCharacter должен содержать символ Ascii правильно?

Как я могу распечатать это?

Я старался: printf(wCharacter); но он говорит: «не может преобразовать« WORD * »в« const char * »»

Что я делаю неправильно? Как распечатать СЛОВО *? Или я неправильно выполнял команду ToAscii?

Большое спасибо.

0

Решение

WORD и ToAscii () — это стандартный C ++, поэтому ответить на этот вопрос довольно сложно. Однако в любом случае есть две проблемы:

  • Первый аргумент printf () должен быть строкой формата. Вы не поставили ни одного.
  • Строка — это последовательность символов, оканчивающаяся нулевым байтом. Если вы хотите распечатать один символ, переданный в качестве параметра, предполагая, что WORD является чем-то интуитивным, вы можете использовать строку формата «% c».
1

Другие решения

Вы не собираетесь далеко продвигаться с этим, вы передаете неинициализированный указатель на 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, которая может быть внедрена в другие процессы. Вы, конечно, изобретаете колесо, покупайте, а не собирайте — это лучший совет. Также сделает ваши пользователи немного более комфортно о ваших намерениях.

1

По вопросам рекламы [email protected]