3

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

当系统默认键盘布局是(比如说)英语,而用户当前的键盘布局是(比如说)德语时,就会出现问题。用户在配置界面中输入一个“ü”字符,该字符被适当记录和存储。

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

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

4

1 回答 1

5

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

GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL))

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

于 2009-06-05T02:34:53.637 回答