【发布时间】:2012-10-08 21:43:07
【问题描述】:
我需要自动输入某个字符(俄语字母Э)。在 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
我的SendMessage 通话中的wParam 一定有问题。
我该如何修复它(使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 没有帮助。
【问题讨论】:
-
检查Spy++中的Wparam参数,不会是221。请查阅手册:msdn.microsoft.com/en-us/library/windows/desktop/…
-
请看截图。当我手动输入字母
Э时,它会显示键盘消息。 -
@DmitriPisarenko 你也可以看看SendInput。它专门用于将击键(和其他输入)发送到外部应用程序。
-
@whosrdaddy WPARAM 等于
0xDD(221)。 -
@satuon
SendInput是否在目标应用程序不专注时工作?
标签: delphi winapi delphi-2009