processList + Regexp

  • Hallo, ich bin dabei mir die Office 2007 CD zu automatisieren. Der OfficeIntegrator ist für meine Zwecke leider nur Bedingt Nützlich. Mein Installtionspfad liegt außerhalb von Programme.

    So nun hab ich verschiedene msiexec.exe die ich prüfen kann und eine mit folgendem muster:

    [autoit]


    ose00001.exe

    [/autoit]


    Die Zahlen ändern sich irgendwie immer d.h. das heist auch mal "ose0008.exe"
    Meine idee die ProcessList zu durchsuchen klappt so nicht ganz.

    [autoit]


    $all_proc= ProcessList()

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

    $array = StringRegExp($all_proc,"ose\d\d\d\d\d.exe",1)

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

    for $i=0 to UBound($array) -1
    MsgBox(0,"titel", "array" & $array[$i])
    Next

    [/autoit]
  • Probier mal folgendes:

    [autoit]

    $all_proc= ProcessList()

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

    for $i=0 to UBound($all_proc) -1
    MsgBox(0,"titel", "array:" & StringRegExp($all_proc[$i][0],"ose\d{5}\.exe",1))
    Next

    [/autoit]


    //Ungetestet

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • [autoit]


    $all_proc= ProcessList()
    Global $myProc = "foo"
    msgbox(0,"before loop",$myProc)

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

    for $i = 0 to $all_proc[0][0]
    $myProc = StringRegExp($all_proc[$i][0],"ose\d{5}\.exe",0)
    ;msgbox(0,"loop","loop: " & $i & @CRLF & "process:" & $all_proc[$i][0] & @CRLF & "array: " & $myProc)
    if $myProc = 1 then
    $myProc = $all_proc[$i][0]
    MsgBox(0,"titel","myProc: " & $myProc)
    endIf
    next

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

    MsgBox(0,"After loop","myProc: " & $myProc)

    [/autoit]

    Danke, doch ist nach der for-Schleife "$myProc" 0, troz Global.

    2 Mal editiert, zuletzt von basti19855 (16. August 2011 um 11:42)

  • Ist doch klar, dass du in den meisten Fällen eine 0 beim verlassen der Schleife in dieser Variable stehen hast. Denn die Schleife geht ja alle Prozesse durch und setzt die Variable entweder auf 1 wenn das Regexp Muster zutrifft oder eine 0 wenn es nicht zutrifft. Da du die Schleife nicht verlässt nachdem etwas gefunden wurde sondern einfach weiterhin bis zum Ende alle Prozesse prüfst kommt nur dann eine 1 (bzw. dank deiner if bedingung der Prozessname) zurück wenn der allerletzte Prozess des Arrays ein Treffer ist, was wohl nie der Fall sein dürfte.

    Lösen kannst du das indem du die Schleife im trefferfall mit exitloop verlässt. Oder Alternativ eine seperate Variable für die Ausgabe verwendest die du dir nicht mit der stringregexp Zeile überschreibst.