Set WshShell = CreateObject("WScript.Shell")
WshShell.run"cmd /k title tututu"
WScript.Sleep 2000
WshShell.AppActivate("123.txt")
WScript.Sleep 2000
WshShell.AppActivate("tututu")
WshShell.SendKeys "adb root"
WshShell.SendKeys "{ENTER}"
123.txt为提前打开的记事文本
上述代码执行后预期:
1.打开cmd窗口,标题改为tututu
2.等待2s
3.123.txt被激活选中
4.等待2s
5.cmd窗口被激活选中
6.cmd窗口输入adb root并按回车
实际结果:
1.打开cmd窗口,标题改为tututu
2.等待2s
3.123.txt被激活选中
4.等待2s
5.cmd窗口并没有被激活选中,但是能看到有光标在闪烁
原因:不详
解决办法:
Set WshShell = CreateObject(“WScript.Shell”)
WshShell.run"cmd /k title tututu"
WshShell.SendKeys “adb root”
WshShell.SendKeys “{ENTER}”
WScript.Sleep 2000
WshShell.AppActivate(“123.txt”)
WScript.Sleep 2000
WshShell.AppActivate(“tututu”)
WshShell.SendKeys “adb root”
WshShell.SendKeys “{ENTER}”
第二种情况:
cmd已经打开,需要用新的vbs脚本激活已打开的cmd窗口
Set WshShell = CreateObject("WScript.Shell")
WshShell.run"cmd /c" //这句话最重要,不然无法激活
WScript.sleep 1000
WshShell.AppActivate("tututu")
WshShell.SendKeys "adb root"
WshShell.SendKeys "{ENTER}"
资料:https://www.thinbug.com/q/52381791
Wscript.sleep将使情况变得更糟。你不想睡觉。
有规则。您的程序必须遵守以下规则之一才能设置前景窗口。
来自https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setforegroundwindow
系统限制可以设置前景窗口的进程。仅当满足以下条件之一时,进程才能设置前景窗口:
•该过程是前台过程。
•该进程由前台进程启动。
•该进程收到了最后一个输入事件。
•没有前台进程。
•该进程正在调试中。
•前台过程不是现代应用程序或启动程序 屏幕。
•前景未锁定(请参见LockSetForegroundWindow)。
•前景锁定超时已到期(请参阅 SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT。)
•没有菜单处于活动状态。
当用户使用时,应用程序无法将窗口强制到前台 正在使用另一个窗口。而是,Windows闪烁任务栏 窗口中的按钮以通知用户。
这意味着如果脚本没有用户界面(因为它不能是前台窗口),那么从脚本开始设置另一个窗口起,您有两秒钟的时间(FOREGROUNDLOCKTIMEOUT)。一个消息框是您要做的第一件事(直到发生其他事情)。另外Wscript的消息框超时-WshShell.Popup。
这是为了防止用户感到无聊并且现在正在使用另一个程序时启动缓慢的程序,从而失去了焦点。
预防性评论通常,人们会想与我争论。向微软投诉不是我。而且你不能与规则争论。您可以遵守它们。