代码之家  ›  专栏  ›  技术社区  ›  barlop Sandeep

vbscript的sendKeys是否支持Unicode?

  •  3
  • barlop Sandeep  · 技术社区  · 16 年前

    我正在查找vbscript的 SendKeys 不支持Unicode。它支持一些类似a-65的字母,但不支持外来字母,如希伯来语字母aleph()。prob超出其支持的范围。可能是128+的十进制值,它给出一个“?”,它只支持ASCII范围。

    我可以使用WindowsXP在我的计算机上键入和查看希伯来文字母。因此,对字符的操作系统支持已经存在并设置好了。我的源代码演示了这一点,因为

    msgbox Chrw(1488)
    

    显示aleph字符,我已将其显示在记事本和MS Word中。

    在我看来,这是在为一个它不认识的角色发送一个问号。我认为MS Word或记事本如果显示字符有问题(例如,当字体不支持字符时),它们将显示一个框而不是问号。当然是记事本。所以看起来像 发送密钥 问题。有什么想法吗?有什么解决办法吗?

    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 回复  |  直到 8 年前
        1
  •  4
  •   barlop Sandeep    10 年前

    你很可能是对的 VBScript的 SendKeys 不支持Unicode .


    监视由执行的Windows API函数调用 发送密钥 (使用) API Monitor Blade API Monitor 在俄语Windows XP中,带有美英、俄语和希伯来语键盘)显示 发送密钥 不支持Unicode。明确地, 发送密钥 执行以下操作:

    1. 调用的ANSI(非Unicode)版本 VkKeyScan 函数函数 VkKeyScanA _获取要发送的字符的虚拟密钥代码。此函数将字符转换为 VK_SHIFT + VK_OEM_2 因此,似乎在这个过程中或之前的某个地方,aleph字符被转换成一个不同的ansi字符。

    2. 调用 SendInput 函数发送 VKH移位 + VKYOEMY2 击键而不是aleph字符。

    这里的主要问题是发送一个Unicode字符, 发送输入 必须使用 KEYEVENTF_UNICODE 标志和相关字符必须通过函数参数“传递”。实验表明,所有情况都不是这样。也, VKKEY扫描 在Unicode字符的情况下实际上不需要,例如 发送输入 本身处理Unicode输入。


    因此,从vbscript向应用程序发送unicode输入的唯一方法是编写一个自定义实用程序或COM组件 发送输入 正确地从脚本调用这个实用程序/组件。(vbscript没有任何访问Windows API的本地方法。)

    由Barlop添加的注释

    虽然vbscript的obj.sendKeys(..)不支持Unicode,但vb的sendKeys.send(..)将是。

        2
  •  1
  •   Miki Watts    8 年前

    我使用的是Dragon,用希伯来语来说很自然,sendkeys确实不能发送希伯来语字符,即使它们显示在宏编辑器中,但是我所做的是用我想要的希伯来语文本设置剪贴板,然后用ctrl-v来粘贴sendkeys,这确实有效,只是sendkeys干扰了编码。

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

    这将覆盖用户剪贴板,并且不适用于将命令字符(ctrl、alt、shift)与希伯来文字符混合,但这是一种解决方案。

        3
  •  -2
  •   Trefex    16 年前

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