我最近在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
,则“扫描”进程确实开始了,但是如果可能的话,我非常需要自动化该操作,直到注册表清理过程的最后。
任何人都可以对此进行指导吗?
请参见SetForegroundWindow
的备注部分。使用SetForegroundWindow
时,脚本必须至少遵守其中一个规则(因为这就是AppActivate
所调用的)。您一直在睡觉,失去了设置前景窗口的权利。以更好的方式查看CCleaner文档AppActivate
系统限制可以设置前景窗口的进程。一种仅在以下情况之一时,进程才能设置前景窗口条件成立:
•该过程是前台过程。
•该过程由前台过程启动。
•该进程收到了最后一个输入事件。
•没有前台进程。
•该进程正在调试中。
•前台过程不是现代应用程序或开始屏幕。
•前景未锁定(请参见LockSetForegroundWindow)。
•前台锁定超时已到期(请参阅SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。
•没有菜单处于活动状态。