关于WScript.Shell脚本检测计算器运行及Exec方法启动程序的疑问
关于检测计算器是否运行及
Exec方法的疑问解答 嘿,我来帮你搞清楚这两个问题!
为什么script.Exec("calc")会启动计算器?
这其实是WScript.Shell.Exec()方法的本职工作哦!这个方法的核心作用就是启动一个外部可执行程序,并创建一个WshExec对象来管理这个刚启动的进程。你传入"calc"(计算器的可执行文件名),系统就会找到calc.exe并启动它,完全是符合这个方法的设计逻辑的~
正确检测计算器是否正在运行的脚本
你现有的代码其实是先启动计算器,然后等待它关闭后弹出提示,这和你想要的「检测程序是否正在运行」的需求刚好相反。如果要检测系统中是否已经有计算器在运行,我们可以用WMI(Windows Management Instrumentation)来查询系统进程,代码示例如下:
' 连接到本地计算机的WMI服务 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") ' 查询所有名为calc.exe的进程 Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'calc.exe'") ' 根据查询结果判断是否正在运行 If colProcesses.Count > 0 Then MsgBox("Calculator is running right now!") Else MsgBox("Calculator isn't open at the moment.") End If
代码说明:
GetObject("winmgmts:\\.\root\cimv2"):建立和本地WMI服务的连接,这是查询系统信息的入口ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'calc.exe'"):执行WQL查询,筛选出所有名为calc.exe的进程- 通过
colProcesses.Count判断是否存在目标进程:数量大于0就说明计算器正在运行
再说说你原来的代码逻辑
你写的代码是先启动计算器,然后进入循环等待进程结束(oExec.Status = 0表示进程正在运行),当进程关闭后(Status = 1)才弹出提示——这时候计算器已经关闭了,所以这个逻辑其实是「启动计算器并等待它关闭」,而不是检测它是否正在运行哦。
内容的提问来源于stack exchange,提问作者Austin Yen
相关产品推荐
相关产品推荐

