Vbscript Sendkey在某些应用程序中不起作用

问题描述 投票:0回答:1

我最近在Google周围搜索,发现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,则“扫描”进程确实开始了,但是如果可能的话,我非常需要自动化该操作,直到注册表清理过程的最后。

任何人都可以对此进行指导吗?

vbscript automation windows-10 window sendkeys
1个回答
0
投票

请参见SetForegroundWindow的备注部分。使用SetForegroundWindow时,脚本必须至少遵守其中一个规则(因为这就是AppActivate所调用的)。您一直在睡觉,失去了设置前景窗口的权利。以更好的方式查看CCleaner文档AppActivate

系统限制可以设置前景窗口的进程。一种仅在以下情况之一时,进程才能设置前景窗口条件成立:

•该过程是前台过程。

•该过程由前台过程启动。

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

•没有前台进程。

•该进程正在调试中。

•前台过程不是现代应用程序或开始屏幕。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.