如何确定另一个进程的键盘布局(Windows)?

Ben*_*aub 3 windows keyboard-layout

我正在制作一个需要录制和播放击键的程序.主进程作为服务运行,因此需要配置程序来记录击键.

当系统默认键盘布局是(比如说)英语时,问题出现了,当前用户的键盘布局是(例如)德语.用户在配置界面中输入"ü"字符,并对其进行适当记录和存储.

现在,用户运行记事本并尝试回击键,这是由服务的孩子完成的.当转换输入传递给SendInput我们时,我们调用VkKeyScan,然后告诉我们没有办法在这个键盘上重现那个字符(记住默认的键盘布局是英文).

我真正想做的是同步服务的键盘布局和当前的前台应用程序,这样服务就可以重现用户可以用键盘输入的任何字符.GetKeyboardLayout仅适用于当前流程.这必须在32位和64位上运行,因此消息挂钩是......不是首选:).

Bev*_*ins 5

要检索前景窗口的键盘布局:

GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL))
Run Code Online (Sandbox Code Playgroud)

这听起来像是在录制字符而不是按键.您可以使用SendMessage发送带有记录字符的WM_CHAR消息而不是生成击键,而不是在重放时发送击键吗?