Ein Teil/Bereich eines Fensters aktivieren/vordergrund bringen

  • Hallo liebe Gemeinde

    Ich habe ein Fenster/Window. In diesem Arbeite ich mit DOWN und TAB Key Eingaben um Optionen auszuwählen.
    Bevor ich dies mache benutze ich immer WinActivate um das Fenster in den Vordergrund zu holen.

    Jetzt habe ich festgestellt das dies zwar funktioniert aber wenn auf dem Rechner gerade was anderes macht
    springt er wohl aus diesem Focus raus und mein DOWN und TAB läuft ins leere.

    Kann man irgendwie einen Bestimmten Bereich eines Fensters "auswählen/aktiv" setzen?

    In meinem Fall (siehe Bild) ist der Gelb makierte Bereich ein Bereich im ganzen Fenster den ich aktivieren möchte
    um dann meine DOWN und TAB Keys zu nutzen.

    Ich habe wie gesagt den Bereich gelb makiert und das Window Info Tool eingeblendet.
    Wie der gelb makierte Bereich im ganzen Fenster heißt sieht man ja unter ClassnameNN.


    Vielen Vielen Dank

    Spoiler anzeigen

    [Blockierte Grafik: http://i26.tinypic.com/2ibcbhu.jpg]

  • Hallo,
    ich gehe davon aus, daß du die Controls innerhalb des Fensters nicht ansprechen kannst und es deshalb über das "Send" versuchst.
    Du könntest entweder versuchen, eventuelle Nutzereingaben während der Laufzeit des Sciptes mittels

    [autoit]

    blockinput()

    [/autoit]

    abzufangen oder (noch schlechter :) ) vor jedes "Send" ein ""Winactivate "(winwaitactive) zu setzen und zu hoffen, daß dir ein anderer Prozess zwischen den beiden Befehlen nicht den Focus "klaut".
    Beide Möglichkeiten sind übel, bei Multithreatingsystemen muss man mit diesen Gegebenheiten aber leben^^
    ciao
    Andy

  • Hallo Andy

    Du hast Recht. Mit ControlClick etc komme ich nicht weiter da ich die einzelnen Listeneinträge nicht ansprechen kann.
    Eingebettetes IE Fenster in einem Windows Fenster.
    Deswegen benutze ich Send("{TAB}") usw.

    Ich habe mal die Hilfe weiter durchgeschaut un gesehen das es soetwas gibt.

    Spoiler anzeigen


    Erweiterte Fensterbeschreibungen

    Eine spezielle Beschreibung kann als Fenster Titel Parameter genutzt werden. Diese Beschreibung kann mit Hilfe der folgenden Eigenschaftendazu genutzt werden, ein Fenster zu identifizieren:


    • TITLE - Fenstertitel
    • CLASS - Der interne Klassenname des Fensters
    • REGEXPTITLE - Fenstertitel, der eine regular expression benutzt (ist der reguläre Ausdruck falsch, wird @error auf 2 gesetzt)
    • REGEXPCLASS - Fenster Klassenname verwendet einen regular expression benutzt (ist der reguläre Ausdruck falsch, wird @error auf 2 gesetzt)
    • LAST - Das zuletzt in einem AutoIt-Befehl genutzte Fenster
    • ACTIVE - Das momentan aktive Fenster
    • X \ Y \ W \ H - Die Position und Größe eines Fensters
    • INSTANCE - Die 1-basierte Instanz, wenn alle gegebenen Eigenschaften überein stimmen


      Ich habe mir jetzt mit dem WinInfoTool nochmal alles genau angeschaut und folgendes gebastelt.

    [autoit]

      WinActivate("[TITLE:Client - Nexxis; CLASS:ATL:021658D0; INSTANCE:1]", "")

    [/autoit]

      Ist das ersteinmal soweit Richtig und würde dies zum Erfolg führen?

      In der Regel ist es halt so, dass wenn ich das Programm aufrufe, das Fenster dazu aktiv ist und
      ich sofort mit SEND TAB usw usw loslegen kann.

      Habe jedoch festgestellt (vermutlich Hintergrundprozesse) das es manchmal pasiert, das der Focus (nicht vom GANZEN FENSTER selber)
      sondern nur aus dem IE Bereich worin sich die Liste befindet, verliert.

      Laut WinInfoTool hat dieser IE Bereich im Fenster die CLASS=CLASS:ATL:021658D0

      Deshalb kam ich auf die Idee mit dieser Zeile:
      WinActivate("[TITLE:Client - Nexxis; CLASS:ATL:021658D0; INSTANCE:1]", "")

      Kann ich damit sicherstellen das der Focus aufjedenfall gesetzt wird????

  • du kann auch ein fokus setzen schau dir mal die Fenstertitel und -text (Grundlagen) in der hilfe an
    wenn du scite als ediot nimms ist auch ein code generator

  • Hallo Argonmember,
    genau wie du (mit [TITLE: XXXX CLASS:YYYYY]) greife ich so auf "Fensterteile" zu, die anders nicht zu erreichen sind.
    Scheint zzt. die einzige Möglichkeit zu sein, man weiss zwar nicht GENAU, was in dem angesprochenen Fenster abläuft (da keine Rückmeldung über Controls möglich) aber ich bin da pragmatisch, hauptsache es läuft^^
    ciao
    Andy