'*** v6.1 *** www.dieseyer.de ******************************* ' ' File: programme-nacheiander-starten.vbs ' Autor: dieseyer@gmx.de ' dieseyer.de ' ' Das Skript meldet sich, wenn ein Programm komplett ' geladen ist. Dann soll die CPU-Last über eine "Dauer" ' kleiner 10% Sein. ' siehe dazu auch: progr-cpu-last-test.vbs ' ' Microsoft: The Portable Script Center - v3.0, Nov. 2004 ' "Monitor Process Performance" ' '************************************************************ Option Explicit ' Siehe http://dieseyer.de/dse-wsh-lernen.html#OptionExpl ProgrRuheOK "C:\Programme\AVPersonal\AVWIN.EXE", 5 ' ohne LOG-Datei ' ProgrRuheOKlog "C:\Programme\AVPersonal\AVWIN.EXE", 5 ' mit LOG-Datei MsgBox "Habe fertig . . . ", 4096, WScript.ScriptName WScript.Quit '*** v6.1 *** www.dieseyer.de ******************************* Function ProgrRuheOK( Progr, Dauer ) '************************************************************ ' CPU-Last durch "Progr" soll für den Zeitraum ' von "Dauer" unter 10% liegen Const CPUlast = 10 Dim i, Zeit, Tst ' WMI bereit stellen Dim objWMIService : Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Dim objRefresher : Set objRefresher = CreateObject("WbemScripting.SWbemRefresher") Dim colItems : Set colItems = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet Dim objItem ' zu überwachendes Programm starten, nicht aufs Ende des gestarteten Programms warten WScript.CreateObject("WScript.Shell").Run Progr, , False ' ProgrammName, wei er im Taskmanager erscheint Progr = Mid( Progr, InStrRev( Progr, "\" ) + 1 ) Progr = Left( Progr, InStrRev( Progr, "." ) - 1 ) ' MsgBox ProgrTst : WScript.QUIT Zeit = Timer() ' gestartetes Programm überwachen Do wscript.sleep( 100 ) objRefresher.Refresh For Each objItem in colItems If InStr( UCase( objItem.Name ), "AVWIN" ) > 0 Then Tst = objItem.PercentProcessorTime If Int( Tst ) > CPUlast Then Zeit = Timer() End If Next If Timer() - Zeit > Dauer Then Exit Do Loop ProgrRuheOK = True End Function ' ProgrRuheOK( Progr, Dauer ) '*** v6.1 *** www.dieseyer.de ******************************* Function ProgrRuheOKlog( Progr, Dauer ) '************************************************************ ' CPU-Last durch "Progr" soll für den Zeitraum ' von "Dauer" unter 10% liegen Const CPUlast = 10 Dim i, Zeit, Tst ' LOG-Datei für Protokollierung öffnen Dim fso : Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim FileOut : Set FileOut = fso.OpenTextFile( Replace( WSCript.ScriptName, "vbs", "log" ), 2, true) ' WMI bereit stellen Dim objWMIService : Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Dim objRefresher : Set objRefresher = CreateObject("WbemScripting.SWbemRefresher") Dim colItems : Set colItems = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet Dim objItem ' zu überwachendes Programm starten, nicht aufs Ende des gestarteten Programms warten WScript.CreateObject("WScript.Shell").Run Progr, , False ' ProgrammName, wei er im Taskmanager erscheint Progr = Mid( Progr, InStrRev( Progr, "\" ) + 1 ) Progr = Left( Progr, InStrRev( Progr, "." ) - 1 ) ' MsgBox ProgrTst : WScript.QUIT Zeit = Timer() ' gestartetes Programm überwachen Do wscript.sleep( 100 ) objRefresher.Refresh For Each objItem in colItems If InStr( UCase( objItem.Name ), "AVWIN" ) > 0 Then Tst = objItem.PercentProcessorTime If Int( Tst ) > CPUlast Then Zeit = Timer() End If Next If Timer() - Zeit > Dauer Then Exit Do fileOut.WriteLine( now() & vbTab & Tst & vbTab & Timer() - Zeit ) Loop fileOut.WriteLine( now() & vbTab & Tst & vbTab & Timer() - Zeit ) ProgrRuheOKlog = True End Function ' ProgrRuheOKlog( Progr, Dauer ) '*** v6.1 *** www.dieseyer.de ******************************* Function Now() '************************************************************ ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' ! ! ! Damit funktioniert natürlich DateDiff nicht mehr ! ! ! ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ' Now gibt jetzt einen String und kein (verwendbares) Datum zurück Now = Date & " " & Time & ",00" ' Wenn Timer() ein Komma enthält, wird: Now = Date & " " & Time & [Rest von Timer] If InStr( Timer(), "," ) > 0 Then Now = Date & " " & Time & Mid( Timer(), InStr( Timer(), "," ) ) ' Wenn Timer() nach dem Komma einstellig ist, wir eine 0 angehangen If Len( Mid( Now, InStrRev( Now, "," ) ) ) = 2 Then Now = Now & "0" End Function ' Now()