使用或可以使用VBscript';s的SendKey支持Unicode?

使用或可以使用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中显示了它

我发现VBscript的
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
执行以下操作:

  • 调用函数的ANSI(非Unicode)版本-
    VkKeyScanA
    ,以获取要发送的字符的虚拟密钥代码。此函数将字符转换为
    VK_SHIFT
    +
    VK_OEM_2
    ,因此在转换之前或过程中,Aleph字符似乎被转换为不同的ANSI字符

  • 调用函数以发送
    VK_SHIFT
    +
    VK_OEM_2
    击键,而不是Aleph字符

  • 这里的主要问题是,要发送Unicode字符,必须使用标志调用
    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程序的语言版本相匹配的语言。在组合框中,选择一个阿拉伯语选项。重新启动。那怎么办?特雷菲克斯,我试过了,我用发生的事情回答了海伦的评论。这是一个很容易的问题,你复制,然后你会知道它不工作!如果您尝试了该代码,您会发现它不起作用,如果通过更改语言设置,它突然起作用,那么您就有了解决方案!但你没有。如果您在机器上尝试,您会发现您的建议无效!但不管怎样,正如我所说的,海伦当时已经激励我去尝试你们现在提出的建议,而我已经回答了