奇怪的WM_CHAR行为(错误的chCharCode)

时间:2012-10-18 12:22:27

标签: delphi winapi delphi-2009

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

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

enter image description here

为了以编程方式发送此消息,我使用此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始终为0x5989)。

更新2 :使用WM_UNICHAR代替WM_CHAR无效。

1 个答案:

答案 0 :(得分:3)

你应该发送一个角色的UTF-16代码为WPARAM(俄语'Э'为1069),例如:

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(Edit1.Handle, WM_CHAR, WPARAM(1069), LPARAM(0));//$280001));
end;
相关问题