VBscript的SendKeys是否支持Unicode?

时间:2010-07-07 20:36:28

标签: 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

3 个答案:

答案 0 :(得分:4)

你很可能认为 VBscript的SendKeys不支持Unicode


监视由SendKeys执行的Windows API函数调用(使用API MonitorBlade API Monitor在俄语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字符。

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


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

    由barlop添加的注释

    虽然vbscript的obj.SendKeys(..)不能识别unicode,但是VB的SendKeys.Send(..)会是。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:-2)

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