我发现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
答案 0 :(得分:4)
你很可能认为 VBscript的SendKeys
不支持Unicode 。
监视由SendKeys
执行的Windows API函数调用(使用API Monitor和Blade API Monitor在俄语Windows XP上使用英语,俄语和希伯来语键盘)显示SendKeys
不是Unicode知道的。具体而言,SendKeys
执行以下操作:
调用VkKeyScan
函数的ANSI(非Unicode)版本 - VkKeyScanA
- 来获取要发送的字符的虚拟键代码。此函数将字符转换为VK_SHIFT
+ VK_OEM_2
,因此似乎在过程之前或过程中将Aleph字符转换为不同的ANSI字符。
调用SendInput
函数发送VK_SHIFT
+ VK_OEM_2
次键击而不是Aleph字符。
这里的主要问题是,要发送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
。