http://dieseyer.de • all rights reserved • © 2011 v11.4
'*** 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()
http://dieseyer.de • all rights reserved • © 2011 v11.4