【问题标题】:Detect keyboard input after windows recognition of the keywindows识别键后检测键盘输入
【发布时间】:2013-06-11 16:40:13
【问题描述】:

我正在构建一个程序,可以在屏幕上打印出按下按钮的值。当程序的窗口不活动时,我也需要它工作。我尝试使用 GetAsyncKeyState(int),效果很好。但是,我可以将某些字符串附加到键上,但它不适用于所有类型的键盘(例如,在英文键盘上 shift+2 是 @,而在我的键盘上则不是)。如何检测 Windows 对键输入的后处理(在记事本中书写时打印在屏幕上的字符)?

【问题讨论】:

  • 你可能想设置一个 Windows 键盘挂钩。
  • 为什么你的程序需要这样做?是输入法吗?屏幕键盘?键盘记录器? IME 有专门的接口来执行此操作。屏幕键盘通常不显示生成的键(它显示在目标应用程序中)。
  • 杰瑞棺材 > 感谢您的建议。似乎它会起作用,但是,它似乎并不容易实现。有代码示例吗?
  • Raymond Chen > 应该是和朋友一起在一个键盘上玩的游戏,他们需要尽快找到某些键。
  • 然后让游戏告诉你它什么时候得到了这个角色以及它是什么角色。

标签: c++ windows button input keyboard-input


【解决方案1】:

试试 OemKeyScan 功能。你应该有scancode(例如,“2”键具有给定的扫描码,根据键盘上的位置始终相同,例如“2”键为 17):

    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);
            }
    }

【讨论】:

  • 好的,我得到了所有键盘上相同的扫描码。它可以工作,但我如何将它与 GetAsyncKeyState(int) 一起使用,它以虚拟键作为输入?如果我写符号“@”,我希望它在任何键盘上,无论是 shift+2 还是 shift+',它都会给我“@”。
猜你喜欢
  • 2014-04-18
  • 2012-09-10
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多