【问题标题】:WScript Sendkey doesn't accept Unicode CharactersWScript Sendkey 不接受 Unicode 字符
【发布时间】:2014-04-14 11:13:49
【问题描述】:

我正在尝试使用 WScript Sendkeys 发送字符“ä”。似乎它不起作用。我找到了一个帖子Does or Can VBscript's SendKeys support Unicode?

我的代码:

Set sh = WScript.CreateObject("WScript.Shell")
sh.Run "notepad.exe", 9
WScript.Sleep 1000 'wait a while to load notepad app'
sh.SendKeys " äää Hello World!"  //buggy line
sh.SendKeys "{ENTER}"
WScript.Sleep 100'
sh.SendKeys "^p"

但我无法理解解决方案。如果您用简单的代码(用于解决方案)教我,那就太好了。我不擅长 WScript(因为它不是我的领域)。 我知道我在乞求代码(请原谅我)。但请理解我的情况。

提前非常感谢!!

【问题讨论】:

  • 解决方案简单地说明了 SendKeys 被微软引入 Unicode 的方式所削弱。具体来说,您遇到了 Windows 窄字符集不应该是 UTF-8 的问题。还提到的解决方法是不使用 WScript,而是直接使用本机范围的 API。

标签: unicode vbscript sendkeys wsh


【解决方案1】:

Windows 脚本宿主的SendKeys doesn't support Unicode

WSH/SendKeys 的替代方案:

  • 使用免费工具 AutoIt 进行 GUI 自动化。您可以使用 AutoIt 的 SendControlSendControlSetText 命令来自动输入文本。

    Run('notepad.exe')
    WinWaitActive("[CLASS:Notepad]", "", 10)
    ControlSend("[CLASS:Notepad]", "", "Edit1", "äää Hello World!")
    
  • 用另一种编程语言(C++、C# 等)编写代码并使用 KEYEVENTF_UNICODE 标志调用 Windows API SendInput 函数。

【讨论】:

    【解决方案2】:

    评论有误。除了称为扫描码的键盘代码之外,没有诸如 unicode 或任何其他代码键盘之类的东西。如果你不能在键盘上输入它,那么 sendkeys 也不能。它们是击键而不是字符。含义取决于您使用的键盘布局。使用与键盘相同的击键。如果窗口是使用 CreateWindowA 创建的,Windows 会将其转换为 ascii 字符;如果窗口是使用 CreateWindowW 创建的,则将其转换为 unicode 字符。

    【讨论】:

    • tonybd:-我尝试了您的建议并将我的系统键盘布局更改为法语,它对“à”有效,但对于 char“æç”,它给了我空白空间。对不起,我没有任何可以放 所以特别提到你的名字
    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多