Script zum betätigen von Tastenkombinationen bei erscheinen eines Fensters

  • Hallo Leute,

    ich habe versucht mir ohne Programmierkentnisse ein Script zu bauen, mit dem beim erscheinen eines bestimmten Fensters, eine Tastenkombination abgesetzt werden soll.
    Ich bekomme es aber nicht zum laufen.
    Bisher sieht das so aus:

    [autoit]

    #include <Array.au3>

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

    ; Initialize tracking arrays
    Global $avWinListPrevious[1][2] = [[0, ""]], $avWinListCurrent

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

    ; Monitor unique window handles
    While 1
    $avWinListCurrent = WinList("[REGEXPTITLE:.+[ \- ]Total Commander]", "Total Commander")
    For $n = $avWinListCurrent[0][0] To 1 Step -1
    ; Check has title and visible
    If ($avWinListCurrent[$n][0] <> "") And BitAND(WinGetState($avWinListCurrent[$n][1]), 2) Then
    ; Check for already seen
    $fFound = False
    For $i = 1 To $avWinListPrevious[0][0]
    If $avWinListCurrent[$n][1] = $avWinListPrevious[$i][1] Then
    $fFound = True
    ExitLoop
    EndIf
    Next

    ; New window found
    If Not $fFound Then
    WinActivate($avWinListCurrent[$n][1], "")
    Send("!w")
    EndIf
    Else
    _ArrayDelete($avWinListCurrent, $n)
    EndIf
    Next
    $avWinListCurrent[0][0] = UBound($avWinListCurrent) - 1
    $avWinListPrevious = $avWinListCurrent
    Sleep(500)
    WEnd

    [/autoit]

    Was mache ich falsch?

  • Wenn es immer den gleichen Wortlaut im Titel hat (z.B. beim überspringen von Kopiervorgängen) benutz doch einfach

    [autoit]

    If Wintitle() = "überschreiben?" Then send("!w") ...

    [/autoit]

    Nebenbei gesagt geht das auch viel schneller, da "Winlist" einen moment lang braucht bis er alle Informationen zusammengekramt hat.

    Viele Grüße
    Aquaplant

  • Das heißt ich würde den ganzen Arraygedöns weglassen?

    Und ich trage in "überschreiben" dann einfach den Wert ein der bei AutoIt Window Info erscheint?
    Das Problem ist, das bei Total Commander alle Fenster den gleichen Titel haben.
    Gibts da nen Trick, die einzelnen Fenster zu unterscheiden?

  • Würde auch mal dazu raten dieses winlist wegzulassen. Stattdessen könntest du in einer Endlosschleife auch einfach auf die Existenz des Dialogs prüfen, welchen du umgehen willst.

    [autoit]


    while 1
    ; wenn fenster da ist auf überspringen button klicken, Daten zum Fenster und button control findest du per au3 window info raus...
    if winexists("Titel des Dialog Fensters", "sichtbarer eindeutiger Text im Dialog Fenster") then controlclick("fenstertitel","","[Class:XXXXXX; Instance:XX]") ; überspringen button klicken...
    ; sollte das Fenster immer existieren und nur sichtbar/unsichtbar gemacht werden sollte winexists durch alternativen wie winactive oder wingetstate ersetzt werden...
    wend

    [/autoit]

    Viel einfacher ist es aber wohl TotalCommander gescheit einzustellen und dafür zu sorgen, dass erst garkein Dialog mehr erscheint. Sollte doch wohl möglich sein ein Standardverhalten für bereits existierende Dateien einzustellen...

  • Viel einfacher ist es aber wohl TotalCommander gescheit einzustellen und dafür zu sorgen, dass erst garkein Dialog mehr erscheint. Sollte doch wohl möglich sein ein Standardverhalten für bereits existierende Dateien einzustellen...


    Naja, es handelt sich dabei um eine Fehlermeldung, in der er auf meint er habe keine Schreibrechte. Die hat er aber und ein klick auf "Wiederholen" macht das es dann auch durchläuft.
    Da scheint es sich eher um ein Problem beim Kopieren zu handeln.
    Daher versuche ich ihm beizubringen dass er es einfach nochmal versuchen soll.

    Ich schreibe das mal eben zusammen, mal schauen ob das klappt.