Msgbox打开时如何循环?
Posted
技术标签:
【中文标题】Msgbox打开时如何循环?【英文标题】:How to loop while Msgbox is open? 【发布时间】:2021-08-13 17:57:00 【问题描述】:我开发了一个脚本,它在代码中的某个位置调用一个 VBScript,它最小化所有当前打开的 Windows 并显示一个 MsgBox。该脚本设置为在启动时运行,因此其他应用程序也在用户登录机器时启动。
批量调用VBS->
cscript //nologo lckPNot.vbs
lckPNot.vbs——>
set objShell = CreateObject("shell.application")
objShell.MinimizeAll
x=MsgBox ("Message Here.",0+48,"Notification")
objShell.MinimizeAll
成功最小化所有当前打开的窗口,但是一旦在objShell.MinimizeAll
之后和用户向 MsgBox 提供输入之前打开一个窗口,我就会遇到问题。
即我需要一种表达方式:
while MsgBox = Visible
Minimize All
Loop
如果上述方法不可行,我也可以尝试在批处理代码本身中使用循环,即 而 lckPNot.vbs = 运行 调用 KillProcesses.bat 循环
其中KillProcesses.bat
是另一个在给定点杀死所有打开任务(而不是最小化)的批处理。
如何做到这一点?
【问题讨论】:
这能回答你的问题吗? CScript/WScript Prevent an error from being blocking 嗯,这是一个开始。基本上这将允许我在 msgbox 出现时完成执行,但我仍然需要一种方法来检测消息框是关闭还是打开,想法? 副本告诉您的是MsgBox()
阻止代码执行,您需要使用cscript.exe
以避免GUI 元素阻止脚本。
【参考方案1】:
在一个单独的进程中运行 MsgBox 并检查它。像这样:
WaitOnMsgBox.vbs
Set oShell = CreateObject("Wscript.Shell")
Set oShApp = CreateObject("Shell.Application")
Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
Function ProcessExist(Exe,File)
ProcessExist = False
On Error Resume Next
Set oProcesses = oWMI.ExecQuery("SELECT * FROM Win32_Process")
For Each oProcess In oProcesses
If InStr(oProcess.CommandLine,Exe) Then
If InStr(oProcess.CommandLine,File) Then
ProcessExist = True
Exit Function
End If
End If
Next
On Error Goto 0
End Function
oShell.Run ".\MsgBox.vbs ""Message Here"" 0+48 ""Notification""",1,False
Do While ProcessExist("\WScript.exe","\MsgBox.vbs")
oShApp.MinimizeAll
WScript.Sleep 500
Loop
MsgBox.vbs
On Error Resume Next
Message = WScript.Arguments.Item(0)
Icon = Eval(WScript.Arguments.Item(1))
Title = WScript.Arguments.Item(2)
On Error Goto 0
MsgBox Message,Icon,Title
【讨论】:
以上是关于Msgbox打开时如何循环?的主要内容,如果未能解决你的问题,请参考以下文章