Hallo,
Dumme Frage:
gibt es eine einfache Lösung um ein WinWait auf einen Prozess zu machen bis die CPU-Auslastung von diesem Prozess 0% beträgt?
MFG Taucher
Hallo,
Dumme Frage:
gibt es eine einfache Lösung um ein WinWait auf einen Prozess zu machen bis die CPU-Auslastung von diesem Prozess 0% beträgt?
MFG Taucher
Hi!
Gibt im Forum Skripte, die die CPU-Auslastung eines Prozesses messen - die müsste man anpassen, denke ich.
peethebee
hallo,
irgendwie find ich nichts vergleichbares! HAst du mal nen Link zu sonem Thema
Taucher
Suchbegriff "Auslastung" und ein bisschen Ausdauer beim Suchen bringt mir das:
Process status abfragen
peethebee
hi,
ja das einen habe ich dann auch gefunden. Leider will es aber nicht recht laufen.
[autoit]#include <process.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]Global $process = "firefox.exe"
While 1
Sleep(10)
$cpu_usage = _Get_CPU_Usage(@ComputerName, 0, $process); return usages if smaller the percent passed in
If Not @error Then
ToolTip("CPU Usage of " & $process & @CRLF & "IDLE : " & $cpu_usage & " %" , 0, 0, "CPU USAGE", 1)
ExitLoop
EndIf
WEnd
Func _Get_CPU_Usage($strComputer, $percent = 5, $strProcess = "")
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
If $strProcess <> "" Then $strProcess = " WHERE Name = '" & $strProcess & "'"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process" & $strProcess, "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
If Number($objItem.PercentProcessorTime) > Number($percent) Then Return $objItem.PercentProcessorTime
Next
EndIf
SetError(1)
Return ""
EndFunc ;==>_Get_CPU_Usage
Ist es möglich es etwas näher zu erklären was geschieht. Ich habe es laufen lassen aber bei mir geschieht nix.
Taucher
PS. hat wer ne Erklärung
Hallo Taucher.
Also ich mache es immer so, wenn ich ein Script versuchen möchte etwas näher zu verstehen.
Die Worte, zu den man eine erklärung bekommen kann, sind ja in Deinem Script hier beid er Veröffentlichung unter strichen und ich kliche die an, die ich nicht verstehe. Daraus lernt man einiges und versteht dann vielleicht bischen ebsser was passiert.
Dazu kommt, das ich gesehen habe, das Du an einigen Stellen dreifache Anführungsstriche hast, wobei ich nicht sagen kann, ob das so richtig ist. Einfach, also zwei "Hochkommas" oder ein einzelndes "Hochkomma" kenne ich, aber drei "Hochkommas" direkt hintereinander, ich meine das ist so nicht ganz richtig, aber da einfach selber mal bischen die deutsche Hilfe durchgehen.
Gruß, Lina.
hi,
danke damit habe ich mich beschäftigt. Nur es möchte nicht laufen. Es ist so original aus einem Thema hier im Forum übernommen. Ich würde es gerne einsetzen wenn es denn läuft. Dazu würde ich gerne ein paar klärende Worte haben.
Taucher
Das einzige was am Programm falsch ist, ist die zweite Zeile -
schreibe statt:
Global $process = "firefox.exe"
Global $process = "firefox"
dann geht es auch.
Erklärung?
Nun ja etwas komplizierter. Die Funktion _Get_CPU_Usage fragt über die "Windows Management Instrumentations" (kurz WMI) die "PercentProcessorTime" des angegbenen Tasks über die Performance Daten von "Win32_PerfFormattedData_PerfProc_Process" ab.
Siehe auch:
http://de.wikipedia.org/wiki/Windows_M…nstrumentations
Dies geschieht darüber, daß du erst ein entsprechendes Objekt erzeugst:
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
und über dieses per $objWMIService.ExecQuery die Daten abfrägst. (ist diese SQL Anweisung: "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process WHERE=firefox".)
Damit frägst du alle Daten von "Win32_PerfFormattedData_PerfProc_Process" über den angebenen Process ab.
Diese Informationen kannst du dann alle erhalten:
http://msdn2.microsoft.com/en-us/library/aa394277.aspx
Und die "PercentProcessorTime" wird dann einfach als Tooltip ausgeben, wenn sie diesen voreingestellten Wert ($percent ) überschreitet.
So ich hoffe ich habe da nix falsches erzählt
Grüße
Stilgar
hi,
danke das war doch recht hilfreich. Nun habe ich mal hier Excel genommen und hier eine Änderung vorgenommen $percent = 25 eine ander Zahl eingegenen. Doch es tut sich rein garnichts. Excel geht weit über die 25% hinnaus. Was mache ich noch falsch das ich kein Ergebniss sehe?
Taucher
Schwer zu sagen. Hab grad kein Excel zur Hand. Wie heißt es denn im Taskmanager?
Zur besseren Funktionskontrolle nimm mal aus der While-Schleife dieses ExitLoop heraus, dann siehst du besser was der Prozess gerade "macht".
Und die erste Zeile #include <Process.au3> ist auch überflüssig, da keine Funktion daraus verwendet wird.
Grüße
Stilgar
hi,
ja ich weis nicht weiter. Habe auch firefox genommen und das EXITLOOP raus genommen aber nichts.
:weinen:
Taucher
Das ist komisch, manche WMI Sachen gehen zwar nicht überall, aber das hier ist ja nichts besonderes.
Probiers mal so:
Global $process = "firefox"
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
$cpu_usage = _Get_CPU_Usage(@ComputerName, 0, $process); return usages if smaller the percent passed in
If Not @error Then
ToolTip("CPU Usage of " & $process & @CRLF & "IDLE : " & $cpu_usage & " %" , 0, 0, "CPU USAGE", 1)
EndIf
WEnd
Func _Get_CPU_Usage($strComputer, $percent = 0, $strProcess = "")
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
If $strProcess <> "" Then $strProcess = " WHERE Name = '" & $strProcess & "'"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
If @error Then
MsgBox(0, "WMI Output", "Can't create WMI object")
SetError(1)
Return -1
EndIf
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process" & $strProcess, "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
If Number($objItem.PercentProcessorTime) > Number($percent) Then Return $objItem.PercentProcessorTime
Next
Else
MsgBox(0, "WMI Output", "Win32_PerfFormattedData_PerfProc_Process")
SetError(1)
Return -1
EndIf
EndFunc ;==>_Get_CPU_Usage
[/autoit]
und mach dabei irgendwas mit Firefox, dann sollte sich die Anzeige des Tooltips ändern, falls vorher keine Fehlermeldung kommt.
Hast du Adminrechte? Könnte hilfreich sein.
Einfach mit:
#RequireAdmin
holen.
peethebee
Nach einem Boot ist alle wieder gut. Es geht weis der Geier was mein Rechner hatte. Nun muss ich es nur hinbekommen das die Überwachung des Programmes geht, damit das WinWait richtig geht. Es soll ja weiter gemacht werden wenn das Programm die CPU mit 0% belastet.
Taucher