4

我发现 VBscriptSendKeys不支持 Unicode。它支持 A-65 之类的一些字母,但不支持希伯来字母表中的字母 Aleph (א) 等外来字母。超出其支持范围的概率。可能是 128+ 的十进制值,它给出一个“?”,它只支持 ASCII 范围。

我可以使用 Windows XP 在我的计算机上键入和查看希伯来字母。所以操作系统对字符的支持就在那里并设置好了。我的源代码证明了这一点,因为该行

msgbox Chrw(1488)

显示 Aleph 字符,我已经在记事本和 MS Word 中显示了它。

在我看来,它正在为它不认识的字符发送一个问号。我认为如果 MS Word 或记事本确实在显示字符时出现问题(例如,当字体不支持字符时),它们会显示一个框而不是问号。无论如何,当然在记事本的情况下。所以它看起来像一个SendKeys问题。有任何想法吗?任何一种解决方法?

Dim objShell

Set objShell = CreateObject("WScript.Shell")

objShell.Run "notepad" ''#can change to winword

Wscript.Sleep 2000

msgbox Chrw(1488)  ''#aleph

objShell.SendKeys ("abc" & ChrW(1488) & "abc")  ''#bang, it displays a ? instead of an aleph

WScript.Quit
4

3 回答 3

4

您的猜测很可能是正确的,即VBscriptSendKeys不支持 Unicode


SendKeys(使用API MonitorBlade API Monitor在俄语 Windows XP 上使用英语美国、俄语和希伯来语键盘)执行的 Windows API 函数调用的监控表明它SendKeys不支持 Unicode。具体来说,SendKeys执行以下操作:

  1. 调用ANSI(不是Unicode)版本的VkKeyScan函数————VkKeyScanA获取要发送的字符的虚拟键码。此函数将字符转换为VK_SHIFT+ VK_OEM_2,因此似乎在某处之前或在此过程中 Aleph 字符被转换为不同的 ANSI 字符。

  2. 调用SendInput函数以发送VK_SHIFT+VK_OEM_2击键而不是 Aleph 字符。

这里的主要问题是,要发送 Unicode 字符,SendInput必须使用KEYEVENTF_UNICODE标志调用,并且必须通过函数参数传递相关字符 - 实验表明情况并非如此。此外,VkKeyScan在 Unicode 字符的情况下实际上不需要,因为SendInput它本身处理 Unicode 输入。


鉴于此,将 Unicode 输入从 VBScript 发送到应用程序的唯一方法是编写一个自定义实用程序或 COM 组件以SendInput正确使用并从您的脚本中调用此实用程序/组件。(VBScript 没有任何本地方式来访问 Windows API。)

barlop 添加的注释

虽然 vbscript 的 obj.SendKeys(..) 不支持 unicode,但 VB 的 SendKeys.Send(..) 可以。

于 2010-07-09T18:34:49.353 回答
1

我正在使用 Dragon Naturally speak with hebrew,SendKeys 确实无法发送希伯来语字符,即使它们显示在宏编辑器中,但是,我所做的是使用我想要的希伯来语文本设置剪贴板,然后使用 Ctrl-V 设置 SendKeys对于粘贴,确实有效,只是 SendKeys 与编码混淆。

Clipboard("טקסט בעברית")
SendKeys("^V")

这将覆盖用户剪贴板,并且不适用于将命令字符(Ctrl、Alt、Shift)与希伯来字符混合,但这是一种解决方法。

于 2018-01-13T06:51:45.997 回答
-2

尝试Microsoft Sans Serif在记事本中设置字体。

于 2010-07-08T08:35:57.950 回答