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

时间:2009-05-29 00:19:31

标签: windows keyboard-layout

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

当系统默认键盘布局是(比如说)英语时,问题出现了,当前用户的键盘布局是(比方说)德语。用户在配置界面中输入“ü”字符,并将其妥善记录并存储。

现在用户运行记事本并尝试回击键,这是由服务的孩子完成的。转换输入以传递给SendInput时,我们调用VkKeyScan,然后告诉我们无法在此键盘上重现该字符(请记住默认键盘布局为英语)。

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

1 个答案:

答案 0 :(得分:5)

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

GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL))

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