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

我正在开发一个需要logging和回放击键的程序。 主进程作为一个服务来运行,所以它需要一个configuration程序来logging击键。

当系统默认的键盘布局是(比如)英语,并且用户的键盘布局是德语时,问题就出现了。 用户在configuration界面input“ü”字符,并进行正确的logging和存储。

现在,用户运行记事本并尝试重新播放按键,这是由服务的子节点完成的。 当转换input传递给SendInput ,我们调用VkKeyScan ,然后告诉我们没有办法在这个键盘上重现那个字符(记住默认的键盘布局是英文的)。

我真正想做的是同步服务的键盘布局和当前的前台应用程序,这样服务可以重现用户可以用键盘input的任何字符。 GetKeyboardLayout只能在当前进程中运行。 这必须在32位和64位上运行,所以消息钩是…不是首选:)。

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

 GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) 

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