如何使用winapi SendMessage键入键盘上的任何字符?

时间:2015-01-27 02:02:53

标签: java winapi sendmessage

这引起了我的注意。我正在逆向工程一个Java项目,该项目旨在实现某些桌面任务的宏自动化。与其他主动移动现实光标的程序不同,该项目通过WinApi发送消息。这使得应用程序认为使用了单击/键入,而实际用户输入不会中断,其他程序不受影响。我很久以前就想过类似的事情,但不知道该怎么做。

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

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

sendMsg包含winapi SendMessage的地方:

SendMessage(hwnd, 258, key, 0);

嗯,这对abcd之类的东西来说毫无疑问。但即使对于带有变音符号的角色,我也能使用它!

screenshot of the code and result

现在我期待像破坏功能键操作或类似的东西。我对此事的疑问是:

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

1 个答案:

答案 0 :(得分:1)

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