Prozesse schliessen die im Inifile gelistet sind

  • Hallo zusammen

    Ich würde gerne noch die Prozesse die in der Case-Schleife genannt werden, dynamisch aus einem Inifile auslesen. Irgendwie bekomme ich es nicht zum laufen, der Case schleife den richtigen Syntax zu übergeben.

    So wie es jetzt ist, läuft es zwar, trotzdem wäre ein dynamisches Handling via Inifile schöner. Ich hoffe jemand findet schnell zeit für mich. ;)

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

    $config = (@ScriptDir & "\UserInfo.ini")
    $titel= IniRead($config, "Configuration", "Titel", "NichtGefunden")
    $zeile1= IniRead($config, "Configuration", "Zeile1", "NichtGefunden")
    $zeile2= IniRead($config, "Configuration", "Zeile2", "NichtGefunden")
    $zeile3= IniRead($config, "Configuration", "Zeile3", "NichtGefunden")
    $zeile4= IniRead($config, "Configuration", "Zeile4", "NichtGefunden")
    $zeile5= IniRead($config, "Configuration", "Zeile5", "NichtGefunden")
    Opt("TrayMenuMode",1)
    Global $iKill = 0
    While 1
    TrayTip($titel, @LF & $zeile1 & @LF & @LF & $zeile2 & @LF & @LF & $zeile3 & @LF & @LF & $zeile4 & @LF & @LF & $zeile5, 5, 1)
    $list = ProcessList()
    For $i = 1 To $list[0][0]
    Switch $list[$i][0]
    Case "Winword.exe", "Outlook.exe", "Excel.exe", "Powerpnt.exe", "MSACCESS.EXE", "acrobat.exe", "AcroRd32.exe", "iexplore.exe", "MSPUB.EXE"
    ToolTip($titel &", terminated process: " & $list[$i][0], 550, 0)
    Sleep(1000)
    RunWait(@ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir, @SW_HIDE)
    $iKill = $iKill + 1
    Case "xy777z.exe" ; Zweite gruppe von Programmen die anders gekillt werden muss
    ; Anderer Kill Befehl hier einfügen
    $iKill = $iKill + 1
    EndSwitch
    Next
    Sleep(1000)
    WEnd

    [/autoit]

    Inhalt des Inifiles:


    Der Aufbau von [Prozesse] im Inifile ist notwendig, da ich vorgängig mit einer Messagebox die Benutzer auffordere, die Apllikationen zu schliessen ([ gelöst ] Offene Prozesse abfragen, MSGBox zum schliessen einblenden OK /Cancel - Errorlevel übergeben) -

    Einmal editiert, zuletzt von Surfy (23. September 2011 um 13:46)

  • Hallo surfy,

    nimm

    [autoit]

    IniReadSection

    [/autoit]

    dann hast du alle zu schliessenden in einem Array. Deinen Swicht .. Case .. Endswitch Teil tauschst du gegen eine For .. Next Schleife. In dieser prüfst du dann ob das aktuelle Element des WinList-Array im IniSection-Array entahalten ist.,

    mfg autoBert

  • Herzlichen Dank für den Tip

    Bei mir setzt das verständniss leider sehr für aus, sobald die Schleifen und Arrays ins Spiel kommen..

    [autoit]

    For $i = 1 To $var[0][0]
    MsgBox(4096, "", "Schlüssel: " & $var[$i][0] & @CRLF & "Wert: " & $var[$i][1])
    Next

    [/autoit]

    Wie wird $i zu 1 - oder woher weiss die For Schleife, wann alle Ergebnisse durchlaufen sind?

    Aber weg von meinen Unzulänglichkeiten, und zurück zum Code ;)

    Eine For Schleife habe ich ja schon.

    $list = ProcessList()
    For $i = 1 To $list[0][0]

    Allerdings ist mir nun Schleierhaft, wie ich für jedes $i einen Abgleich mit dem zweiten Array machen kann (und da jeweils jede möglichkeit durchspielen kann.

    $list = ProcessList()
    For $i = 1 To $list[0][0]

    For $i = 1 To $geleseneintersection[0][0]

    if $list[0][0]=$geleseneinersection[i][0] then killtask $list[0][0]

    In leiser verzweilfung...


    Surfy

  • Hallo surfy,

    du kannst es so machen:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

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

    $config = (@ScriptDir & "\UserInfo.ini")
    $titel = IniRead($config, "Configuration", "Titel", "NichtGefunden")
    $zeile1 = IniRead($config, "Configuration", "Zeile1", "NichtGefunden")
    $zeile2 = IniRead($config, "Configuration", "Zeile2", "NichtGefunden")
    $zeile3 = IniRead($config, "Configuration", "Zeile3", "NichtGefunden")
    $zeile4 = IniRead($config, "Configuration", "Zeile4", "NichtGefunden")
    $zeile5 = IniRead($config, "Configuration", "Zeile5", "NichtGefunden")
    $aToClose = IniReadSection($config, "Prozesse")
    _ArrayDisplay($aToClose)

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

    Opt("TrayMenuMode", 1)
    Global $iKill = 0
    ;While 1
    TrayTip($titel, @LF & $zeile1 & @LF & @LF & $zeile2 & @LF & @LF & $zeile3 & @LF & @LF & $zeile4 & @LF & @LF & $zeile5, 5, 1)
    $list = ProcessList()
    For $i = 1 To $list[0][0]
    For $j = 1 To $aToClose
    If $list[$i][0] = $aToClose[$j][0] Then ;hier ist es wichtig die beiden Laufvariablen der Schleifen nicht zu verwechseln
    ToolTip($titel & ", terminated process: " & $list[$i][0], 550, 0)
    ;RunWait(@ComSpec & ' /c taskkill.exe /F /IM ' & $list[$i][0], @WindowsDir, @SW_HIDE)
    $iKill += 1
    Sleep(5000) ;damit der Tooltipp auch mind. 5 sec sichtbar ist
    EndIf
    Next
    Next
    Sleep(1000)
    ;WEnd

    [/autoit]
  • Danke euch beiden!

    Die Exe wird als Prozess gestartet, und soll solange laufen, bis ich den Prozess beende.

    Dabei soll laufen überprüft werden, ob einer der im inifile gelisteten Prozesse läuft, und dieser Beendet werden. Dabei soll der User Informiert werden, via Tooltip.

    Daher ist die While Schleife schon passend, um das ganze in eine Endlosschlaufe zu bringen?

    autoBert: Leider läuft das ganze von Dir noch nicht - es werden keine Prozesse beendet, oder diese oben im Tootip angezeigt. Irgendwie läuft die verschachtelte Schlaufe nicht rund.

    XP-User: das unschöne an deiner Lösung ist, dass "ProcessClose" auch ausgeführt wird, wenn der genannte Prozess gar nicht läuft. Hier bist Du wieder nur bei einer Schlaufe.

    Meine versuche mit

    [autoit]

    Opt("TrayMenuMode", 1)
    $config = (@ScriptDir & "\UserInfo.ini")
    $titel = IniRead($config, "Configuration", "Titel", "NichtGefunden")
    $zeile1 = IniRead($config, "Configuration", "Zeile1", "NichtGefunden")
    $zeile2 = IniRead($config, "Configuration", "Zeile2", "NichtGefunden")
    $zeile3 = IniRead($config, "Configuration", "Zeile3", "NichtGefunden")
    $zeile4 = IniRead($config, "Configuration", "Zeile4", "NichtGefunden")
    $zeile5 = IniRead($config, "Configuration", "Zeile5", "NichtGefunden")
    $aToClose = IniReadSection($config, "Prozesse")
    ;_ArrayDisplay($aToClose)

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

    Global $iKill = 0
    While 1
    TrayTip($titel, @LF & $zeile1 & @LF & @LF & $zeile2 & @LF & @LF & $zeile3 & @LF & @LF & $zeile4 & @LF & @LF & $zeile5, 5, 1)
    $list = ProcessList()
    For $i = 1 To $list[0][0]
    For $j = 1 To $aToClose
    If $list[$i][0] = $aToClose[$j][0] Then ;hier ist es wichtig die beiden Laufvariablen der Schleifen nicht zu verwechseln
    ToolTip($titel & ", terminated process: " & $aToClose[$j][0], 550, 0)
    RunWait(@ComSpec & ' /c taskkill.exe /F /IM ' & $aToClose[$j][0], @WindowsDir, @SW_HIDE)
    $iKill += 1
    Sleep(5000) ;damit der Tooltipp auch mind. 5 sec sichtbar ist
    EndIf
    Next
    Next
    Sleep(1000)
    WEnd

    [/autoit]

    Scheitern leider kläglich ;(

  • Mh meinst das vielleicht so?

    Spoiler anzeigen
    [autoit]

    Opt("TrayMenuMode", 1)
    $config = (@ScriptDir & "\UserInfo.ini")
    $titel = IniRead($config, "Configuration", "Titel", "NichtGefunden")
    $zeile1 = IniRead($config, "Configuration", "Zeile1", "NichtGefunden")
    $zeile2 = IniRead($config, "Configuration", "Zeile2", "NichtGefunden")
    $zeile3 = IniRead($config, "Configuration", "Zeile3", "NichtGefunden")
    $zeile4 = IniRead($config, "Configuration", "Zeile4", "NichtGefunden")
    $zeile5 = IniRead($config, "Configuration", "Zeile5", "NichtGefunden")

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

    $prozesse = IniReadSection(@ScriptDir & "\UserInfo.ini", "Prozesse")

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

    While 1
    TrayTip($titel, @LF & $zeile1 & @LF & @LF & $zeile2 & @LF & @LF & $zeile3 & @LF & @LF & $zeile4 & @LF & @LF & $zeile5, 5, 1)
    While 1
    For $i = 1 To $prozesse[0][0]
    If ProcessExists($prozesse[$i][0]) Then
    ToolTip($titel & ", terminated process: " & $prozesse[$i][1], 550, 0)
    ProcessClose($prozesse[$i][0])
    EndIf
    Next
    WEnd
    Sleep(1000)
    WEnd

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

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Chip, dass war rein funktional die Lösung!

    While 1
    While 1
    TrayTip($titel, @LF & $zeile1 & @LF & @LF & $zeile2 & @LF & @LF & $zeile3 & @LF & @LF & $zeile4 & @LF & @LF & $zeile5, 5, 1)
    For $i = 1 To $prozesse[0][0]
    Sleep(100)
    If ProcessExists($prozesse[$i][0]) Then
    ToolTip($titel & ", terminated process: " & $prozesse[$i][1], 550, 0)
    RunWait(@ComSpec & ' /c taskkill.exe /F /IM ' & $prozesse[$i][0], @WindowsDir, @SW_HIDE)
    ;ProcessClose($prozesse[$i][0])
    EndIf
    Next
    WEnd
    Sleep(1000)
    WEnd


    Aus performance Gründen musste ich noch eine Sleep(100) einbauen - jetzt läufts wie geschmiert - ohne allzuviel CPU Load :)

    Herzlichen Dank euch allen!

  • Wie liesse sich das ZeileX noch dynamisch umformen?

    [autoit]

    $config = (@ScriptDir & "\UserInfo.ini")
    $titel = IniRead($config, "Configuration", "Titel", "NichtGefunden")
    $zeile1 = IniRead($config, "Configuration", "Zeile1", "NichtGefunden")
    $zeile2 = IniRead($config, "Configuration", "Zeile2", "NichtGefunden")
    $zeile3 = IniRead($config, "Configuration", "Zeile3", "NichtGefunden")
    $zeile4 = IniRead($config, "Configuration", "Zeile4", "NichtGefunden")
    $zeile5 = IniRead($config, "Configuration", "Zeile5", "NichtGefunden")

    [/autoit]

    Mit _filereadtoarray() bin ich wohl nicht auf gutem wege.

    $config = (@ScriptDir & "\UserInfo.ini", "zeilen(x))


    For $x = 0 To Ubound($config, 1)

    *Kopfkratz*

  • Mach es so:

    [autoit]

    $config = IniReadSection(@ScriptDir & "\UserInfo.ini", "Configuration")

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.