Delphi 奇怪的WM_字符行为(错误的chCharCode)
我需要自动输入某个字符(俄语字母Delphi 奇怪的WM_字符行为(错误的chCharCode),delphi,winapi,delphi-2009,Delphi,Winapi,Delphi 2009,我需要自动输入某个字符(俄语字母ª)。在Spy++中,相应的消息如下所示: WM_CHAR chCharCode:'221'(221)重复:1扫描代码:28扩展:0故障:0故障:0故障:0故障:0故障 为了以编程方式发送此消息,我使用以下Delphi代码: SendMessage(Self.PassengerGrid、WM_CHAR、WPARAM(221)、LPARAM($280001)) 当我检查在Spy++中运行代码的结果时,我看到以下消息: WM_CHAR chCharCode:'89'
ª
)。在Spy++中,相应的消息如下所示:
WM_CHAR chCharCode:'221'(221)重复:1扫描代码:28扩展:0故障:0故障:0故障:0故障:0故障
为了以编程方式发送此消息,我使用以下Delphi代码:
SendMessage(Self.PassengerGrid、WM_CHAR、WPARAM(221)、LPARAM($280001))代码>
当我检查在Spy++中运行代码的结果时,我看到以下消息:
WM_CHAR chCharCode:'89'(89)重复:1扫描代码:28扩展:0故障:0故障:0重复:0 fUp:0
我的SendMessage
调用的wParam
一定有问题
如何修复它(使chCharcode
等于221
)`
更新1:
- 发生此错误的机器有两种键盘语言-英语和俄语
- 我注意到当下面的代码
SendMessage(MyGridHandle、WM_KEYDOWN、VK_OEM_7、LPRAM($390000));
SendMessage(MyGridHandle、WM_CHAR、WPARAM(221)、LPARAM($280001));
SendMessage(MyGridHandle、WM_KEYUP、VK_OEM_7、LPRAM($c0390001))
执行时,所选语言(根据托盘图标)从俄语更改为英语
- 无论我在WM_CHAR中传输什么字符,消息的WPARAM总是
0x59
(89
)
更新2:使用WM_UNICHAR
而不是WM_CHAR
没有帮助。您应该将字符的UTF-16代码作为WPARAM发送(即1069表示俄语的“ª”),例如:
在Spy++中检查Wparam参数,它不会是221。请参考手册:请看屏幕截图。当我手动键入字母ª
时,它会显示键盘消息。@DmitriPisarenko您也可以查看。它专门用于向外部应用程序发送击键(和其他输入)。@whosrdaddy WPARAM等于0xDD
(221)。@satuon在目标应用程序未聚焦时是否执行SendInput
?在最新的Delphi版本中,您也可以只键入PostMessage(Edit1.Handle,WM_CHAR,WPARAM('urn'),LPARAM(0))@DanBartlett-您的代码在Delphi XE上对我来说不起作用(WPARAM('CharStyle')=221)。
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(Edit1.Handle, WM_CHAR, WPARAM(1069), LPARAM(0));//$280001));
end;