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打开时如何循环?的主要内容,如果未能解决你的问题,请参考以下文章

Python/Pygame 游戏循环问题/让代码运行

Jquery轮播滑块仅在悬停时循环并在鼠标离开时停止?

组件卸载时停止执行我的 React for 循环

在 Flutter 循环进度指示器中显示下载百分比

如何将for next循环中的日期放在excel的单元格中

移动网络 - 如何在键盘打开时获取屏幕高度