unicode - VBscript 的 SendKeys 是否支持 Unicode?

标签 unicode vbscript hebrew sendkeys

我发现 VBscript 的 SendKeys 不支持 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

最佳答案

您的猜测很可能是正确的,VBscript 的 SendKeys 不支持 Unicode


使用 Blade API Monitor 监视 SendKeys 执行的 Windows API 函数调用在带有美国英语、俄语和希伯来语键盘的俄语 Windows XP 上)显示 SendKeys 不支持 Unicode。具体来说,SendKeys 执行以下操作:

  1. 调用 VkKeyScan 的 ANSI(而非 Unicode)版本函数 - VkKeyScanA - 获取要发送的字符的虚拟键代码。此函数将字符转换为 VK_SHIFT + VK_OEM_2,因此看起来在该过程之前或过程中的某个地方,Aleph 字符被转换为不同的 ANSI 字符。

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

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


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

barlop 添加的注释: 虽然 VBScript 的 obj.SendKeys(..) 不支持 Unicode,但 VB 的 SendKeys.Send(..) 会是。

关于unicode - VBscript 的 SendKeys 是否支持 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3198574/

相关文章:

c++ - 在运行时使用 C++ 使用转义序列

unicode - 如何将 Unicode 代码点转换为 Unicode 字符串?

java - 希伯来语在 Tomcat 7 上呈现乱码

Javascript - 如何找到希伯来语?

java - 日文和中文 unicode 代码点的不同表示

powershell - Unicode 与 UTF-8

ms-access - 如何以编程方式将 Access 1997 .mdb 转换为 Access 2007 .accdb

sql - 简单的 Oracle SQL 日期语法问题

SQL/ASP - 预期为 : "- But it' s there?

ruby-on-rails - 我可以在 mongodb 中保存希伯来语字符吗?