【问题标题】:Vbscript Sendkeys not working in some applicationsVbscript Sendkeys 在某些应用程序中不起作用
【发布时间】:2020-02-12 07:49:43
【问题描述】:

我最近在谷歌上搜索,发现CCleaner 之类的工具可以通过 VBScript 或 AutoIt 脚本自动扫描和修复注册表错误。

由于我更喜欢​​原生工具和库,所以我创建了一个 VBScript 来自动化注册表清理过程(直到最后一次单击按钮,因为按钮太多而无法自动化),如下所示:

On Error Resume Next
Set WshShell = WScript.CreateObject("WScript.Shell")
Set UsrEnvDmn = WshShell.Environment("User")
UsrEnvDmn("CclnrInstDir") = "C:\Program Files\CCleaner"
WshShell.Run """%CclnrInstDir%\\CCleaner64.exe"" /Registry"
WScript.Sleep 1000 : WshShell.AppActivate "CCleaner"
WScript.Sleep 2000 : WshShell.SendKeys "%s"
WScript.Sleep 5000 : WshShell.SendKeys "%f"
Set WshShell = Nothing : Set UsrEnvDmn = Nothing

但问题是一旦 CCLeaner 打开并成为焦点,Sendkeys 函数就不会单击/选择窗口中的任何按钮或选项。如果我手动按下Alt + s,那么扫描过程确实开始了,但我非常需要自动化这件事,如果可能的话,直到注册表清理过程的最后。

有人可以指导吗?

【问题讨论】:

  • 同时作为用户和管理员输入cleanmgr /?。这是唯一安全的方法。

标签: vbscript automation windows-10 window sendkeys


【解决方案1】:

SetForegroundWindow的备注部分。当您使用 AppActivate 时,您的脚本必须至少遵守其中一项规则(因为这是 AppActivate 所调用的)。你一直在睡觉,失去了设置前景窗口的权利。以更好的方式查看 CCleaner 文档https://www.ccleaner.com/docs/ccleaner/advanced-usage/command-line-parameters

系统限制哪些进程可以设置前台窗口。一个 只有满足以下条件之一时,进程才能设置前台窗口 条件为真:

•进程是前台进程。

•进程由前台进程启动。

•进程收到最后一个输入事件。

•没有前台进程。

•正在调试进程。

•前台进程不是现代应用程序或启动 屏幕。

•前景未锁定(请参阅 LockSetForegroundWindow)。

•前台锁定超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。

•没有菜单处于活动状态。

【讨论】:

  • 朋友,首先你分享了CCleaner命令行参数的链接,在哪个页面,没有任何SetForegroundWindow部分,其次,我检查了该手册中的其他链接已经很好了,但是没有任何链接说明将 AppActivate 与 CCleaner 一起使用的任何规则,所以我不知道您在说什么文档,但是 CCLeaner 文档肯定没有它......把链接放在深入了解 VBscript 函数 AppActivate...
  • 很久很久以前,程序可以无限制地设置前台窗口。所以程序滥用它或者启动太慢,用户感到无聊并开始做其他事情,然后弹出一个窗口,让用户感到厌烦。因此开始应用规则来阻止程序窃取焦点。
  • 您也不能sendkeys 获得更多特权的应用程序。这是在 Windows Vista 中购买的,以防止脚本通过将密钥发送到以管理员身份运行的程序来伪装成管理员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2023-01-12
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多