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
之类的东西也就不足为奇了。但我什至对带有变音符号的字符也有效!
现在我期待像损坏的功能键操作或类似的东西。我关于这件事的问题是:
- 这适用于所有平台吗?至少对于 unicode 应用程序?
- 如何输入功能键?
“...我键盘上的任何字符”确实取决于您的键盘。 WM_CHAR
被记录为处理 UTF-16 如果 目标 window 是 Unicode (CreateWindowW)。要支持 BMP 之外的字符,您应该使用 WM_UNICHAR
...
这让我大吃一惊。我正在对一个 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
之类的东西也就不足为奇了。但我什至对带有变音符号的字符也有效!
现在我期待像损坏的功能键操作或类似的东西。我关于这件事的问题是:
- 这适用于所有平台吗?至少对于 unicode 应用程序?
- 如何输入功能键?
“...我键盘上的任何字符”确实取决于您的键盘。 WM_CHAR
被记录为处理 UTF-16 如果 目标 window 是 Unicode (CreateWindowW)。要支持 BMP 之外的字符,您应该使用 WM_UNICHAR
...