winapi SendMessage 怎么可能允许在我的键盘上键入任何字符?

How can winapi SendMessage possibly allow to type any character on my keyboard?

这让我大吃一惊。我正在对一个 Java 项目进行逆向工程,该项目旨在实现某些桌面任务的宏观自动化。与主动移动现实生活光标的其他程序不同,该项目通过 WinApi 发送消息。这使得应用程序认为已使用 clicked/typed 而实际用户输入不会中断并且其他程序不会受到影响。很久以前就想到了类似的东西,但是不知道怎么做。

为了在字段中输入字符串,该项目使用了非常简单的方法:

  public void typeString(String text) {
   for (char key : text.toCharArray()) {
     sendMsg(258, key, 0);
   }
  }

其中sendMsg包含winapi SendMessage调用:

SendMessage(hwnd, 258, key, 0);

嗯,这适用于 abcd 之类的东西也就不足为奇了。但我什至对带有变音符号的字符也有效!

现在我期待像损坏的功能键操作或类似的东西。我关于这件事的问题是:

  1. 这适用于所有平台吗?至少对于 unicode 应用程序?
  2. 如何输入功能键?

“...我键盘上的任何字符”确实取决于您的键盘。 WM_CHAR 被记录为处理 UTF-16 如果 目标 window 是 Unicode (CreateWindowW)。要支持 BMP 之外的字符,您应该使用 WM_UNICHAR...