使用或可以使用VBscript';s的SendKey支持Unicode?
我发现VBscript的使用或可以使用VBscript';s的SendKey支持Unicode?,unicode,vbscript,hebrew,sendkeys,Unicode,Vbscript,Hebrew,Sendkeys,我发现VBscript的SendKeys不支持Unicode。它支持一些像A-65这样的字母,但不支持像希伯来语字母表中的字母Aleph(א)这样的外来字母。Prob超出其支持的范围。可以是128+的十进制值,它给出一个“?”,并且它只支持ASCII范围 我可以使用Windows XP在我的计算机上键入和查看希伯来文字母。因此,操作系统对角色的支持已经存在并设置好了。我的源代码演示了这一点,因为 msgbox Chrw(1488) 显示Aleph字符,我已经在记事本和MS Word中显示了它
SendKeys
不支持Unicode。它支持一些像A-65这样的字母,但不支持像希伯来语字母表中的字母Aleph(א)这样的外来字母。Prob超出其支持的范围。可以是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
尝试在记事本中将字体设置为Microsoft Sans Serif。您很可能猜对了VBscript的
发送键不支持Unicode
监控由
SendKeys
执行的Windows API函数调用(使用俄语Windows XP和英语-美国、俄语和希伯来语键盘)表明SendKeys
不支持Unicode。具体而言,SendKeys
执行以下操作:
VkKeyScanA
,以获取要发送的字符的虚拟密钥代码。此函数将字符转换为VK_SHIFT
+VK_OEM_2
,因此在转换之前或过程中,Aleph字符似乎被转换为不同的ANSI字符VK_SHIFT
+VK_OEM_2
击键,而不是Aleph字符SendInput
,并且所涉及的字符必须通过函数参数传递-实验表明,所有情况都不是这样。另外,对于Unicode字符,VkKeyScan
实际上并不需要,因为SendInput
本身处理Unicode输入
有鉴于此,从VBScript向应用程序发送Unicode输入的唯一方法是编写一个自定义实用程序或COM组件,该实用程序或组件将正确利用
SendInput
,并从脚本中调用此实用程序/组件。(VBScript没有任何本机方法来访问Windows API。)
巴洛普添加的注释
虽然vbscript的obj.SendKeys(..)不支持unicode,但VB的SendKeys.Send(..)将支持unicode 我使用Dragon自然地说希伯来语,SendKeys确实不能发送希伯来语字符,即使它们显示在宏编辑器中,但是,我所做的是用我想要的希伯来语文本设置剪贴板,然后用Ctrl-V键粘贴SendKeys,这确实有效,只是SendKeys弄乱了编码
Clipboard("טקסט בעברית")
SendKeys("^V")
这将覆盖用户剪贴板,不适用于混合命令字符(Ctrl、Alt、Shift)和希伯来语字符,但这是一种解决办法。您安装了哪些键盘布局,以及在区域和语言选项中为非Unicode程序设置了什么语言?以及语言和布局。语言英语英国与布局英语英国。语言英语和布局英语。语言为希伯来语,布局为希伯来语。至于“非unicode程序的语言”,美国英语。我试过希伯来语。无论哪种方式,msgbox都会显示msgbox chrw(1488)的字符Aleph。(总是这样)但当“非unicode程序的语言”(需要重新启动)设置为US时,记事本会显示吗?对于sendkeys chrw(1488)。当设置为希伯来语时,记事本对sendkeys chrw(1488)不显示任何内容。因此仍然没有显示sendkeys chrw(1488)的字符。我编辑了您的文章以改进格式,希望您不要介意。如果您不介意的话,请随意编辑。我目前唯一能给出的建议是删除VBScript,并使用
SendInput
在C/C++中重写程序。关于这个问题的附加说明。为了让人们能够重现问题(或一个紧密联系的问题)。可以将aleph改为pi。因此,将ChrW(1488)改为ChrW(960)。在这里,Msgbox显示符号。sendkeys显示的是P而不是pi符号。否,请参见原始问题:“我认为MS Word或记事本如果显示字符时出现问题(例如,字体不支持字符),则会显示方框而不是问号。当然是记事本。”对,菲利普。另外,arial、times new roman或我使用的任何字体都支持aleph字符。。因此,更改为ms sans serif字体(另一种支持该字体的字体)自然不起作用。控制面板>区域和语言选项>高级阅读:“此系统设置允许非Unicode程序以其母语显示菜单和对话框。它不影响Unicode程序,但适用于此计算机的所有用户。选择与要使用的非Unicode程序的语言版本相匹配的语言。在组合框中,选择一个阿拉伯语选项。重新启动。那怎么办?特雷菲克斯,我试过了,我用发生的事情回答了海伦的评论。这是一个很容易的问题,你复制,然后你会知道它不工作!如果您尝试了该代码,您会发现它不起作用,如果通过更改语言设置,它突然起作用,那么您就有了解决方案!但你没有。如果您在机器上尝试,您会发现您的建议无效!但不管怎样,正如我所说的,海伦当时已经激励我去尝试你们现在提出的建议,而我已经回答了