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