Process status abfragen

  • Hallo!

    bin noch ein ziemlicher Neuling.
    ich hätte gerne, dass mein skript den Status einer *.exe datei abfrägt und dann erst weiter arbeitet. das heißt wenn die *.exe datei im taskmanager aktiv ist=systemleistung>0%), soll im skript nichts passieren. erst wenn die *.exe datei alles abgearbeitet hat (systemleistung im taksmanager = 0%), soll im skript weiter vorgegangen werden. habt ihr irgendwelche Vorschläge!

    Danke für eure Hilfe
    Jo

    • Offizieller Beitrag

    Also ich bin kein Spezialist in Prozeßfragen. Aber vom Grundverständnis her denke ich, dass das nicht möglich ist. (lasse mich hier aber gerne korrigieren)
    Meiner Meinung nach ist die Systemleistung pro Prozeß auch dann zwischenzeitlich = 0, wenn der Prozeß noch läuft. Denn kein Prozeß hat 100% Priorität. Insofern hast du ein Schwanken bis 0, bevor der Prozeß abgelaufen ist. Die Priorität eines Prozesses kannst du zwar abfragen, aber nicht die momentane Last.


    EDIT

    Schnapszahl, das war mein 444. Post ;)

  • hallo,

    ich bin leider auch kein profi in dem Sinne.... aber versuchs doch mal damit:

    $Anzahl_Progs = 1 ; oder mehr Programme
    Dim $Programme[$Anzahl_Progs] = ["Prog1", "Prog2", "Prog3"] ; Hier die Namen eintragen getrennt mit Komma

    For $i in $Programme
    ShellExecuteWait($i)
    Next


    Oder

    ProcessWaitClose( "*.exe" [, timeout] )


    grüsse

    Chicago

    • Offizieller Beitrag

    HI,

    teste mal dies: Skript starten und dann firefox öffnen und surfen.

    Spoiler anzeigen
    [autoit]

    Global $process = "firefox"

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    So long,

    Mega

  • hi meger.....
    das script funktioniert bei mir jedenfalls noch nicht ganz....im traytip steht ne auslastung von 100%..der taskman verrät mir grad mal eine auslastung von 2%...selbst das ganze system ist nicht zu 100% ausgelastet grade mal 45% oder so...außerdem zeigt ds ding nur zwei verschiedene werte an..einmal 50% oder 100%......

    der snoozer

  • Hallo,

    an diesem Thema bin ich auch sehr interessiert. Koennte ich in der Firma
    sehr gut gebrauchen. Z.B.: auf welchem Server schaukelt sich welcher
    Prozess regelmaessig hoch.

    In Deinem Script habe ich jedoch festgestellt das bei den
    meisten Prozessen im Feld "PercentProcessorTime" aus der WMI-Class
    "Win32_PerfFormattedData_PerfProc_Process" nix drin steht.
    Also = 0.

    Man muesste mal rauskriegen aus welchen Werten der Taskmanager die
    CPU-Auslastung in % pro Prozess berechnet. Habe wirklich schon alles
    durchsucht, aber im gesamten Netz wenig dazu gefunden.

    Einmal editiert, zuletzt von jschwarzb (31. Mai 2007 um 15:58)

  • hello,
    dazu gibts sogar was im englischen forum(glaub sogar meger hatte das hier auch mal gepostet...)
    CPU Meter (eng forum)
    cpu usage(eng forum)

    snoozy