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