Я строю программу, которая будет печатать значения нажатых кнопок на экране. Мне нужно, чтобы это работало также, когда окно программы не активно. Я попытался использовать GetAsyncKeyState (int), который работает нормально. Тем не менее, я могу прикрепить определенные строки к клавишам, но это не работает для всех типов клавиатур (например, на английских клавиатурах shift + 2 — это @, а на моей — нет). Как я могу обнаружить постобработку ввода с клавиатуры, выполняемую Windows (символ, который печатается на экране при записи в блокноте)?
Попробуйте функцию OemKeyScan. С твоим ты должен иметь сканкод (например, клавиша «2» имеет заданный код сканирования, который всегда одинаков в зависимости от положения на клавиатуре, например, 17 для клавиши «2»):
int whichscancode= 17;
if (key_with_shift)
whichscancode|= (1<<16); // shifted values with 1<<16
for (i=0; i<256; i++) {
int scan= ::OemKeyScan(i); // try all characters for a matching scancode
if (scan==whichscancode) {
// i here is the ascii code of the key on that position
printf("on that scancode is character %c\n", (char)i);
}
}
Других решений пока нет …