如何使用VB脚本在关闭Internet Explorer后重新启动它

4

我正在寻找一份VB脚本,如果IE关闭,它将自动重新启动我正在开发的一个信息亭。这是旧版本的脚本,但现在已经不再起作用。

Set WshShell = CreateObject("WScript.Shell")
Do While True
WshShell.Run """<the path to the executable file>""", 1, True
Loop

这段代码的问题在于它不断地循环打开IE浏览器。

我无法在注册表中使用"NoBrowserClose",因为这会阻止登陆Sharepoint网站,而这是必需的。


1
VB.NET IsNot(VBScript) - Ňɏssa Pøngjǣrdenlarp
1
最好的方法是检查Internet Explorer是否正在运行。如果正在运行,我们让脚本休眠一段时间,然后再次检查。如果没有运行,我们就启动它! - Hackoo
我对VBScript不是非常熟悉,这个脚本中有睡眠的代码吗? - JukEboX
另一个问题是它无法识别IE正在运行。当IE正在运行时,它只会打开另一个窗口。因此,这里肯定还有一些缺失或错误。 - JukEboX
1个回答

2
这个VB脚本可以完成任务,试一下吧:
Option Explicit
Dim ProcessPath,KioskMode
ProcessPath = "%ProgramFiles%\Internet Explorer\iexplore.exe"
KioskMode = " -K"
'Exit if the script is already running.
If AppPrevInstance() Then   
    MsgBox "There is an existing proceeding",VbExclamation,"There is an existing proceeding"    
    WScript.Quit   
Else   
    Do   
        Call Main(Array(ProcessPath))
        Call Pause(1) 'Sleep for 1 minute
    Loop   
End If   
'**************************************************************************
Sub Main(colProcessPaths)   
    Dim ProcessPath   
    For Each ProcessPath In colProcessPaths     
        CheckProcess(ProcessPath)   
    Next   
End Sub   
'**************************************************************************
Sub CheckProcess(ProcessPath)   
    Dim ProcessName : ProcessName = StripProcPath(ProcessPath)   
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
        With .ExecQuery("SELECT * FROM Win32_Process WHERE Commandline LIKE " &  CommandLineLike(ProcessName))   
            If .Count = 0 Then    
                With CreateObject("WScript.Shell")  
                    .Run DblQuote(ProcessPath) & KioskMode
                End With    
            Else    
                Exit Sub    
            End if   
        End With   
    End With   
End Sub   
'**************************************************************************
'Checks whether a script with the same name as this script is already running
Function AppPrevInstance()   
    With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")   
        With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
        " AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")   
            AppPrevInstance = (.Count > 1)   
        End With   
    End With   
End Function   
'**************************************************************************
Sub Pause(Minutes)    
    Wscript.Sleep(Minutes*1000*60)    
End Sub   
'**************************************************************************
Function StripProcPath(ProcessPath)   
    Dim arrStr : arrStr = Split(ProcessPath, "\")   
    StripProcPath = arrStr(UBound(arrStr))   
End Function   
'**************************************************************************
Function CommandLineLike(ProcessPath)   
    ProcessPath = Replace(ProcessPath, "\", "\\")   
    CommandLineLike = "'%" & ProcessPath & "%'"   
End Function
'**************************************************************************
'Function to add the double quotes into a variable
Function DblQuote(Str)
    DblQuote = Chr(34) & Str & Chr(34)
End Function
'**************************************************************************

太完美了!谢谢Hackoo!我只需要删除KioskMode这一行,它就完全符合我的需求。谢谢! - JukEboX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接