Anwendungsfenster das einen Randomnamen hat auswählen

  • :love: Hallo,

    Ich habe ein Programm das zwei Fenster startet. Den Namen von dem ersten Fenster ist der Name der .exe.
    Das zweite Fenster, welches das wichtige ist und auch ausgewählt werden soll, hat leider immer einen anderen zufälligen Namen.
    Ich MUSS leider das zweite auswählen weil er sich dort automatisch einloggen soll.

    Jetzt die Frage: Wie kann ich dieses zweite Fenster auswählen lassen?

    Habe es schonmal mit Alt+Tab versucht aber funktioniert auch nicht :(


    Außerdem ist das auch nicht gerade eine saubere Lösung.

    [autoit]

    Run($exe)
    sleep(6000)
    Send("^{TAB}")

    [/autoit]


    Vielen Dank schonmal für eure Lösungsvorschläge!

    Einmal editiert, zuletzt von Sp4wnY (2. Mai 2009 um 02:19)

  • Sind Teile des Titels deines zweiten Fensters immer gleich?
    Dann kannst du diese aus WinList filtern..

    EDIT: Beispiel mit Scite ->

    Spoiler anzeigen
    [autoit]

    $var = WinList()

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

    For $i = 1 to $var[0][0]
    If $var[$i][0] <> "" AND IsVisible($var[$i][1]) Then
    If StringInStr($var[$i][0], "Scite") Then
    $title = $var[$i][0]
    ExitLoop
    EndIf
    EndIf
    Next

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

    ;~ $title = StringMid($title, StringInStr($title, "-")+1)
    ;~ $title = StringMid($title, 1,StringInStr($title, "[")-1)
    MsgBox(0,"",$title)

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

    Func IsVisible($handle)
    If BitAnd( WinGetState($handle), 2 ) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von ChaosKeks (30. April 2009 um 20:24)

  • wenn das Fenster einen Text hat, der immer gleich ist
    und möglichst einmalig, dann könnte es so funktionieren:

    [autoit]

    $titel_des_fensters = WinGetTitle("","Text der in dem Fenster vorkommt... sollte eindeutig sein")

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Wie gesagt hat leider immer einen Unterschiedlichen Titel bestehend aus 8 verschiedenen Buchstaben und Zahlen oder Sonderzeichen.


    Es werden halt immer 2 fenster gleichzeitig geöffnet. Eins mit dem .exe namen anderes ist zufällig generiert. ;(

  • Du hast mich nicht verstande....

    Verwende das Tool: AutoIt WindowInfo um herauszufinden, welcher Text in dem Fenster mit dem zufälligen Namen "hineinprogrammiert" ist, den das Tool auslesen kann.
    Damit ersetzt Du den Text in dem Befehl, den ich oben gepostet habe, Den Fenstertitel habe ich bewusst leer gelassen --> ""

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich habe den Autor des Programms jetzt einfach angeschrieben und jetzt ist der Randomname weg^_^

    Wenns doch immer so einfach gehen würde, nä?^^

    Wenn die exe jetzt z.B "S1" genannt wurde ist der

    Fenstertitel jetzt X: S1

    [autoit]

    Run($exe)
    sleep(1000)
    WinActivate("X:"&" "&$fenstertitel)

    [/autoit]

    Musste leider noch die (variable?) $fenstertitel hinzufügen weil im namen die .exe nicht angezeigt wird.

    Jetzt meine Frage: kann ich dem Winactivate nicht sagen das er nur auf den teil "s1" achten soll und das .exe ignorieren soll? Denn sonst sucht er nach "X: s1.exe" und dann findet er ja nix.. :thumbdown:

  • Wenn ich das jetzt richtig verstanden habe, hast du ein Programm und du willst anhand des Programmnamens das Fenster mit WinActivate ansprechen, jedoch ohne das ".exe"? Wenn ja, dann lösche das ".exe" doch einfach mit StringReplace() raus.

    [autoit]

    StringReplace( $filename, ".exe", "" )

    [/autoit]
  • Guten Abend,
    ich nehme an, die Funktion sucht von vorne in der Titelangabe so lange weiter, bis er nur noch eines hat,
    bzw. deine Titelangabe zu Ende ist. Du kannst das Verhalten durch spezielle Titelangaben (siehe Hilfe ;) ) beeinflussen,
    hier passt allerdings das Standardverhalten anscheinend schon.
    Das beantwortet bereits alle Fragen.

    Mit verschlafenen ( :D ) Grüßen
    Fast2

    Edit: Ach, da hat ja schon jemand anderes geschrieben. :) So hätte ich die Frage nicht aufgefasst.
    Wir werden sehen was er wollte (das war jetzt auch ein Wink an dich, Sp4wnY :P )

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • $exe = dernameder.exe (die ich in der .ini datei festgelegt habe)


    So habs mal mit stringreplace versucht geht nicht..

    [autoit]

    Run($exe)
    sleep(1000)
    StringReplace( $exe, ".exe", "" )
    WinActivate("AB:"&" "&$exe)

    [/autoit]


    und so gehts auch nicht( wenn du das meinst @ Fast2)

    [autoit]

    Run($exe)
    sleep(1000)
    WinActivate("AB:"&" "&$exe)

    [/autoit]
  • Hallo,
    wusstest du, dass "geht nicht" normalerweise keine Ausreuichende Fehlerbeschreibung ist? Was geht denn nicht?
    Wird das Programm gar nicht erst gedstartet, wird das Fenster nicht aktiviert oder gibt es eine Fehlermeldung?
    Aus dem Kontext könnte man zwar das zweite herauslesen, aber das sind dann alles wieder blos Vermutungen. ;)

    Auf eine Frage und mehr Details hoffend
    Fast2

    Edit: Schon erledigt

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    Einmal editiert, zuletzt von Fast2 (2. Mai 2009 um 16:31)

  • Oh entschuldigung, ich dachte es ist klar, dass das erste gemeint ist. Weil der Code ja richtig ist :-/

    Geht nicht = Das Fenster wird nicht makiert^^

    schonmal danke für weitere Lösungsvorschläge :thumbup:

  • Es kann auch nicht gehen... Du hast den neuen String, den du mit StringReplace erzeugt hast, auch in keiner Variable gespeichert. Es müsste so heißen:

    [autoit]

    Run($exe)
    sleep(1000)
    $exe = StringReplace( $exe, ".exe", "" )
    WinActivate("AB:"&" "&$exe)

    [/autoit]
  • Hallo Sp4wnY,

    teste mal dieses

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    Local $drive,$dir,$Name,$ext
    Local $exe = "dernameder.exe" ;(die ich in der .ini datei festgelegt habe)
    ;Run($exe)
    sleep(1000)
    _PathSplit($exe, $drive,$dir,$Name,$ext)
    MsgBox(0,$Name,"Klappt doch")

    [/autoit]

    mfg (Auto)Bert

  • Ah ok. Ich kenne mich noch nicht so gut mit der Syntax aus desswegen :love:
    hatte mir schon gedacht das die variable noch nicht gesetzt wurde.

    [autoit]

    Run($exe)
    sleep(1000)
    $exe = StringReplace( $exe, ".exe", "" )
    WinActivate("SY:"&" "&$exe)

    [/autoit]

    Funktioniert supper, Danke für eure Hilfe, mein Loginbot wird immer besser hehe!

    Also Logintool besser gesagt.... :thumbup:

    Einmal editiert, zuletzt von Sp4wnY (2. Mai 2009 um 02:19)