【问题标题】:SendKeys Operating System LimitationsSendKeys 操作系统限制
【发布时间】:2018-02-18 23:54:00
【问题描述】:

SendKeys vbScript 方法是否存在与操作系统相关的复杂问题?我正在从 Windows XP 计算机上的 GE Ciplicity 4 项目升级到 Windows Server 2012 R2 虚拟机上的 GE Ciplicity 10 项目。

SendKeys 方法用于在屏幕打开时更改选项卡焦点。无论使用 SendKeys 发送什么密钥,该脚本现在都会无限期冻结。有没有人在操作系统更改后遇到过任何 SendKeys 冻结?

SendKeys “{TAB}”, 1

到目前为止我参考过的文档:

http://proscada.ru/cimplicity/bce-lrf/lrfs/sendkeys.statement.htm

https://social.technet.microsoft.com/wiki/contents/articles/5169.vbscript-sendkeys-method.aspx

【问题讨论】:

    标签: vbscript uac sendkeys scada proficy


    【解决方案1】:
     SendKeys "{TAB}1"
    

    字符串(即文本)必须用引号括起来。

    【讨论】:

    • 你说得对,这是我原帖中的错字。我确实有引号,它可以编译。适用于 XP 但不适用于 Server 2012 R2
    • 您不能将密钥发送到具有不同安全性的进程。这是在 XP 之后出现的。见en.wikipedia.org/wiki/User_Interface_Privilege_Isolation
    • 您的语法特定于 VBA 7。在 VBA6/VBScript/VB.NET 中无需等待。所以只有SendKeys "{TAB}"
    • NoWait 是可选的,有无它我都试过了(没有它默认为 0)。两者在 Windows Server 2012 R2 中仍然冻结,但不是 XP。同样,这不是语法问题,而是为什么 SendKeys 存在性能问题,具体取决于操作系统。
    【解决方案2】:

    该问题已缩小到从 Windows Vista 开始的称为“用户访问控制 (UAC)”的较新 Microsoft 安全功能。需要关闭该功能才能使 sendKeys 命令与 Cimplicity 一起正常工作。

    至于 Cimplicity 之外的 sendKeys 性能,sendKeys 有几个不同的实现,具体取决于时间和操作系统。要强制 sendKeys 仅使用一种实现来获得一致的时序(如果存在一致性问题),您可以更新 app.config 文件以通过添加以下内容来强制实现:

    <appSettings>
        <add key="SendKeys" value="SendInput"/>
    </appSettings>
    

    参考:

    https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2014-03-24
      • 2010-11-13
      • 2015-01-06
      相关资源
      最近更新 更多