'v3.A*************************************************** ' File: exec-test.vbs ' Autor: dieseyer.de ' dieseyer.de ' ' '******************************************************* Option Explicit Dim WSHShell, fso, FileOut Dim oExec Dim input, inputX, i, x, NeueZeit Dim BatDatei Dim FSO_PP, FileOut_PP, VBSDatei_PP, Prog_PP Set Prog_PP = nothing Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set WshShell = CreateObject("WScript.Shell") Set WSHShell = WScript.CreateObject("WScript.Shell") BatDatei = "exec-tst.bat" DateiErstellen BatDatei ' Function DateiErstellen - Aufruf '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' Set oExec = WshShell.Exec( BatDatei ) ' Set oExec = WshShell.Exec("%comspec% /c " & BatDatei ) ' Set oExec = WshShell.Exec("%comspec% /k " & BatDatei ) Set oExec = WshShell.Exec("%comspec% /c " & BatDatei ) ' Start der Anwendung mit der WSHShell.Exec-Methode i = -1 i = +1 NeueZeit = Hour( DateAdd("h", i, time() ) ) NeueZeit = NeueZeit & ":" & Minute( DateAdd("h", i, time() ) ) ' errechnen einer neuen Zeit ' NeueZeit = "8:21" PopsUp NeueZeit, 20 ' Function PopsUp - Aufruf '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Do While True If Not oExec.StdOut.AtEndOfStream Then input = input & oExec.StdOut.Read(1) ' Einlesen der Ausgaben der mit der WSHShell.Exec-Methode ' gestarteten Anwendung If InStr(input, "eben Sie die neue Zeit ein:") <> 0 Then Exit Do ' enthalten die gelesenen Zeichen . . . ' BatDatei hat den 'time'-Befehl ausgeführt End If ' WScript.Sleep 3 Loop oExec.StdIn.Write NeueZeit ' übereben der neuen Zeit an die Anwendung, die mit ' der mit der WSHShell.Exec-Methode gestartet wurde ' (es wird automatisch [Enter] mit übergeben) ' (Antwort auf den 'time'-Befehl in der BatDatei) WScript.Sleep 250 PopsUp "1. Do .. Loop erledigt" & vbCRLF & NeueZeit , 20 WScript.Sleep 300 inputX = "" Do While True If Not oExec.StdOut.AtEndOfStream Then inputX = inputX & oExec.StdOut.Read(1) ' Einlesen der Ausgaben der mit der WSHShell.Exec-Methode ' gestarteten Anwendung If InStr(inputX, ". . . ") <> 0 Then Exit Do ' enthalten die gelesenen Zeichen . . . ' BatDatei hat den 'pause'-Befehl ausgeführt End If Loop input = input & inputX PopsUp "2. Do .. Loop erledigt" , 20 ' oExec.StdIn.Write VbCrLf oExec.StdIn.Write "a" ' Antwort auf 'Press any Key . . . ' ' (Antwort auf den 'pause'-Befehl in der BatDatei) inputX = "" Do While True If Not oExec.StdOut.AtEndOfStream Then inputX = inputX & oExec.StdOut.Read(1) ' Einlesen der Ausgaben der mit der WSHShell.Exec-Methode ' gestarteten Anwendung If InStr(inputX, "- Ende") <> 0 Then Exit Do ' enthalten die gelesenen Zeichen . . . ' BatDatei hat den 'echo ... - Ende'-Befehl ausgeführt End If Loop input = input & inputX PopsUp "3. Do .. Loop erledigt" , 20 PopsUp "Skript erledigt" , 10 MsgBox vbCRLF & input , , WScript.ScriptName ' ************************************************************** Function PopsUp ( TxT, Dauer ) ' Aufruf v3.7 - http://dieseyer.de ' ************************************************************** ' ACHTUNG! Ausserhalb und ver dem ersten Aufruf dieser Prozedur ' muss einmal "Set Prog_PP = nothing" stehen, sonst wird es ' mit dem "prog.terminate" innerhalb der Prozedur nichts! ' ' ACHTUNG! Alle Variablen müssen ausserhalb dieser Prozedur ' deklariert werden (also folgende Zeilen an den Skript-Anafng): ' Dim FSO_PP, FileOut_PP, VBSDatei_PP, Prog_PP ' Set Prog_PP = nothing ' ' Die Vorversion hat (versucht) das PopUp über AppActivate ' zu schließen. Set Fso_PP = CreateObject("Scripting.FileSystemObject") ' VBSDatei_PP = WSHShell.ExpandEnvironmentStrings("%Temp%") & "\" & Fso_PP.GetBaseName( WScript.ScriptName ) & "-MSG.VBS" VBSDatei_PP = WScript.CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") & "\" & Fso_PP.GetBaseName( WScript.ScriptName ) & "-MSG.VBS" On Error Resume Next Prog_PP.terminate ' If not err.Number = 0 then MsgBox err.Description On Error GoTo 0 If Txt = "" then ' On Error Resume Next IF Fso_PP.FileExists(VBSDatei_PP) then Fso_PP.DeleteFile(VBSDatei_PP) ' löscht das MSG-VBScript ' On Error GoTo 0 Exit Function End If Txt = Replace( Txt, vbCRLF, """ & vbCRLF & """ ) Set FileOut_PP = Fso_PP.OpenTextFile(VBSDatei_PP, 2, true) ' MSG-VBScript öffnen mit neu anlegen FileOut_PP.WriteLine "WScript.CreateObject(""WScript.Shell"").Popup """ & Txt & """ , " & Dauer & ", """ & Fso_PP.GetFileName( VBSDatei_PP ) & " "" " FileOut_PP.Close Set FileOut_PP = Nothing Set Prog_PP = createObject("WScript.Shell").exec( "WScript " & VBSDatei_PP ) Set Fso_PP = Nothing End Function ' PopsUp v3.7 - http://dieseyer.de ' ************************************************************** ' ************************************************************** Function DateiErstellen ( Datei ) ' Aufruf ' ************************************************************** Set FileOut = FSO.OpenTextFile( Datei , 2, true) ' Datei zum Screiben öffnen; 2: immer neu anlegen FileOut.WriteLine( "time " ) ' 1. Do .. Loop - Schleife liest die Ausgaben von "time" aus FileOut.WriteLine( "@echo." ) FileOut.WriteLine( "@echo ""doll"" " ) FileOut.WriteLine( "@echo." ) FileOut.WriteLine( "@echo COMSPEC steht auf: %comspec% " ) FileOut.WriteLine( "dir c:\pr*.* /b " ) FileOut.WriteLine( "@ping 127.0.0.1" ) FileOut.WriteLine( "@echo. " ) FileOut.WriteLine( "@echo X = = = X " ) FileOut.WriteLine( "@echo." ) FileOut.WriteLine( "@pause" ) ' 2. Do .. Loop - Schleife liest die Ausgaben BIS "pause" aus FileOut.WriteLine( "@echo." ) FileOut.WriteLine( "@echo %0 - Ende " ) ' 3. Do .. Loop - Schleife liest die Ausgaben BIS zu den ' Ausgaben von "@echo %0 - Ende" aus FileOut.Close Set FileOuT = nothing End Function ' DateiErstellen ( BatDatei ) ' **************************************************************