http://dieseyer.de • all rights reserved • © 2011 v11.4

'*** v6.1 *** www.dieseyer.de *******************************
' File: programme-nacheiander-starten2.vbs
' Autor: dieseyer@gmx.de
' dieseyer.de
'
' Das Skript meldet sich, wenn ein Programm komplett
' geladen ist. Hier (AVWIN.EXE) wird der Umstand aus-
' genutzt, dass das Programm komplett geladen ist, wenn
' der "Handle Count" von 97 auf 95 sinkt - 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

' ProgrRuheCountLog "C:\Programme\AVPersonal\AVWIN.EXE", 97, 95 ' mit LOG-Datei
ProgrRuheCount "C:\Programme\AVPersonal\AVWIN.EXE", 97, 95 ' ohne LOG-Datei

MsgBox "Habe fertig . . . ", 4096, WScript.ScriptName

WScript.Quit



'*** v6.1 *** www.dieseyer.de *******************************
Function ProgrRuheCountLog( Progr, Count1, Count2 )
'************************************************************
' der "Handle Count" für "Progr" sinkt von "Count1" auf
' "Count2", wenn das "Progr" komplett gestarte ist

Dim i, Txt, 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

' gestartetes Programm überwachen
Do
wscript.sleep( 100 )

objRefresher.Refresh

For Each objItem in colItems
If InStr( UCase( objItem.Name ), "AVWIN" ) > 0 Then
Tst = Int( objItem.HandleCount )
fileOut.WriteLine( now() & vbTab & Tst & vbTab )
If Int( Tst ) = Count1 Then Txt = Tst
If Int( Tst ) = Count2 And Txt = Count1 Then Exit Do
End If
Next

fileOut.WriteLine( now() & vbTab & Tst )

Loop

fileOut.WriteLine( now() & vbTab & "Skript-Ende")

ProgrRuheCountLog = True

End Function ' ProgrRuheCountLog( Progr, Count1, Count2 )



'*** v6.1 *** www.dieseyer.de *******************************
Function ProgrRuheCount( Progr, Count1, Count2 )
'************************************************************
' der "Handle Count" für "Progr" sinkt von "Count1" auf
' "Count2", wenn das "Progr" komplett gestarte ist

Dim i, Txt, Tst

' LOG-Datei für Protokollierung öffnen

' 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

' gestartetes Programm überwachen
Do
wscript.sleep( 100 )

objRefresher.Refresh

For Each objItem in colItems
If InStr( UCase( objItem.Name ), "AVWIN" ) > 0 Then
Tst = Int( objItem.HandleCount )
If Int( Tst ) = Count1 Then Txt = Tst
If Int( Tst ) = Count2 And Txt = Count1 Then Exit Do
End If
Next

Loop

ProgrRuheCount = True

End Function ' ProgrRuheCount( Progr, Count1, Count2 )



'*** 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