1

我需要自动输入某个字符(俄语字母Э)。在 Spy++ 中,相应的消息如下所示:

WM_CHAR chCharCode: '221' (221) cRepeat:1 ScanCode:28 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

在此处输入图像描述

为了以编程方式发送此消息,我使用以下 Delphi 代码:

SendMessage(Self.PassengerGrid, WM_CHAR, WPARAM(221), LPARAM($280001));

当我检查在 Spy++ 中运行代码的结果时,我看到以下消息:

WM_CHAR chCharCode: '89' (89) cRepeat:1 ScanCode:28 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

wParam我的电话一定有问题SendMessage

我该如何修复它(以便chCharcode等于221)`?

更新1:

  • 发生此错误的机器有两种键盘语言 - 英语和俄语。
  • 我注意到当下面的代码

    SendMessage(MyGridHandle, WM_KEYDOWN, VK_OEM_7, LPARAM($390000)); SendMessage(MyGridHandle, WM_CHAR, WPARAM(221), LPARAM($280001)); SendMessage(MyGridHandle, WM_KEYUP, VK_OEM_7, LPARAM($c0390001));

执行时,所选语言(根据托盘图标)从俄语变为英语。

  • 无论我在 WM_CHAR 中传输什么字符,WPARAM消息的始终是0x59( 89)。

更新 2:使用WM_UNICHAR而不是WM_CHAR没有帮助。

4

1 回答 1

3

您应该将字符的 UTF-16 代码作为 WPARAM 发送(对于俄语 'Э' 是 1069),例如:

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(Edit1.Handle, WM_CHAR, WPARAM(1069), LPARAM(0));//$280001));
end;
于 2012-10-18T13:49:08.660 回答