Wie kann ich ...
Übersicht 
Anwendung 
Referenzen 
Bestellung 
Download 
Kontakt 
Links 

  ... ein Fenster unabhängig von seinem Titel identifizieren?

Bei bestimmten Anwendungen kommt es vor, dass neben dem Fenstertitel noch weitere Kriterien zur Identifizierung eines Fensters benötigt werden. Dies kann z. B. notwendig sein, weil:

  • manche Anwendungen  zeitweise mehrere Fenster mit gleichem Titel geöffnet haben,
  • manche Fenster im Hinblick auf die zu automatisierende Aktion eine unterschiedliche Bedeutung haben, die von ihrem Inhalt und nicht (nur) von ihrem Titel abhängt.

Ein gutes Beispiel ist die "Makros können Viren enthalten" Warnmeldung, die sich jedes Mal öffnet, wenn man eine Excel-Arbeitsmappe lädt, die Makros enthält und die mittlere Stufe der Makro-Sicherheit eingestellt ist (Extras/Makros/Sicherheit/Mittel).
Leider gibt es keine einfache Option, ein bestimmtes Arbeitsblatt von diesem Warnhinweis auszunehmen, auch wenn dieses bekanntermaßen keine gefährlichen Makros enthält. 

Um die in diesem Fall lästige Warnmeldung zu unterdrücken, soll eine Aktion definiert werden, die beim Öffnen des Warnhinweises prüft, ob es sich um dieses bestimmte Arbeitsblatt handelt und gegebenenfalls die Warnung automatisch beantwortet.

Eine solche Prüfung wird am besten über ein Button-Objekt realisiert, das den Bildschirmausschnitt prüft, der die Pfadangabe der geöffneten Excel Datei enthält (vergleiche nachfolgende Abbildung).
 

 

 

.Bildschirmlupe mit Excel-Dialog

 

Dazu öffnet man die betreffende Exceldatei. Nach dem Erscheinen der Dialogbox aktiviert man die Bildschirmlupe (z.B. über Tools/Bildschirmlupe im Workarounder-Hauptfenster). Dann geht man wie folgt vor:

  1. Im Auswahlfeld der Bildschirmlupe den Titel der Dialogbox auswählen. Achtung: Wahrscheinlich werden zu diesem Zeitpunkt 2 Fenster mit dem Titel "Microsoft Excel" geöffnet sein. Dass Sie das richtige Fenster ausgewählt haben, überprüfen Sie durch die Option "Fenster aktivieren" im Kontextmenü des Auswahlfeldes. Ist anschließend das Hauptfenster von Excel und nicht die Dialogbox aktiviert (dunkelblaue Titelleiste), so müssen Sie den anderen Eintrag "Microsoft Excel" auswählen.
  2. Klicken Sie auf die Schaltfläche "Auf Bildschirmausschnitt ziehen" und ziehen Sie die Schaltfläche mit gedrückter Maustaste auf den Bildschirmausschnitt, der den Dateipfad enthält. (Benötigen Sie einen größeren Bildschirmausschnitt, um eine eindeutige Identifikation der Datei zu gewährleisten, so geben Sie in den Eingabefeldern "Größe"  passende Werte vor.)
  3. Klicken Sie auf die Schaltfläche "Button-Code", um den Quelltext für das Automatisierungsobjekt in die Zwischenablage zu kopieren. (In der Profi-Ansicht der Bildschirmlupe öffnet sich dabei ein Fenster, in dem Sie weitere Details vorgeben können).
  4. Schließen Sie die Bildschirmlupe durch Druck auf die Schaltfläche "Fertig".
  5. Öffnen Sie eine neue Textdatei (z.B. im Windows-Editor) und fügen Sie den Inhalt der Zwischenablage hinein. Sie erhalten den in der Abbildung gelb hinterlegten Text, der das Button-Objekt anlegt und mit den Werten initialisiert, die Sie in der Bildschirmlupe vorgegeben haben.
  6. Ergänzen Sie die folgende Textzeile:
    if Button1.WaitFor then Button1.skp "%a"
    Diese Zeile führt die eigentliche Aktion durch:
    Wenn der über die Bildschirmlupe definierte Bildschirmausschnitt erkannt wird, dann wird der Tastendruck Alt+a simuliert, welche die Schaltfläche "Makros aktivieren" betätigt und die Warnmeldung dadurch schließt.
    Kann trotz einer Wartezeit von von 3 Sekunden der Bildschirmausschnitt nicht verifiziert werden, so wird das Skript abgebrochen, da es sich offensichtlich nicht um das relevante Arbeitsblatt handelt.

Abschließend speichern Sie die Textdatei mit der Endung ".vbs" ab, damit diese als VisualBasic-Skript ausführbar wird.
Legen Sie dann im Register "Fenster" des Workarounder Hauptfensters einen neuen Ereignisdatensatz an, der auf die Aktivierung des Fensters "Microsoft Excel" reagiert.
Als auszuführende Aktion geben Sie über die Schaltfläche "(Neues) Skript wählen" das soeben erstellte Skript an.  
Der fertige Ereignisdatensatz sollte wie folgt aussehen:

 

Screenshot des fertigen Ereignisdatensatzes

 


Nach Aktivierung des Datensatzes und Schließen des Hauptfensters werden die Makros der betreffenden Exel-Datei beim Öffnen automatisch aktiviert, ohne dass Sie den Warnhinweis bestätigen müssen.
 

Hinweis:
Weitere Praxisbeispiele und Hintergrundinformationen zu der hier vorgestellte Vorgehensweise finden Sie im Tutorial (insbesondere in den Übungen 1 bis 3). Eine Befehlsliste für die Ausgabe von Tastendrücken gibt es auch auf der Referenzkarte.
 

 

Variante für Fortgeschrittene:

Natürlich können Sie in obigem Beispiel die Dialogbox auch per automatischen Mausklick beantworten, anstatt einen Tastendruck zu simulieren.
Dazu könnten Sie den Bildschirmausschnitt eines weiteren Button-Objektes über der Schaltfläche positionieren und die Click-Methode dieses Objektes im Skript nutzen. (Das zusätzliche Objekt wäre dann z.B. mit Button2 zu benennen.)

Einfacher ist es jedoch, die ClickOffset-Eigenschaft des ersten Button-Objektes zu verwenden, damit seine Click-Methode auf die Schaltfläche zielt, obwohl sie außerhalb des zu prüfenden Bildschirmausschnittes liegt.
Dazu positionieren Sie den Bildschirmausschnitt in der Bildschirmlupe genau wie oben angegeben. Anschließend gehen Sie folgendermaßen vor:

Screenshot Bildschirmlupe mit Versatz

  1. Wählen Sie die professionelle Ansicht der Bildschirmlupe.
  2. Vergrößern Sie den Bildschirmausschnitt so, dass die Schaltfläche enthalten ist.
  3. Klicken Sie mit der Maus im vergrößerten Bildschirmausschnitt auf die Schaltfläche, so das sich die rote, kreisförmige Markierung des zentralen Pixels auf der zu klickenden Schaltfläche befindet.
  4. Den so eingestellten Versatz kopieren Sie über das Kontextmenü des entsprechenden Eingabefeldes in die Zwischenablage.
     

Nun haben Sie 2 verschiedene Möglichkeiten:

  • Entweder Sie  ergänzen nach dem Gelb hinterlegten Bereich des oben dargestellten Skriptes die folgende Zeile:
    Button1.ClickOffset= "110 135"
    (den Ausdruck "110 135" können Sie aus der Zwischenablage einfügen).
  • Oder Sie klicken in der Bildschirmlupe im Kontextmenü des Eingabefeldes "Größe" auf "Default-Werte", um den ursprünglichen Bildschirmausschnitt wieder herzustellen.
    Anschließend klicken Sie auf die Schaltfläche Button-Code. Es öffnet sich der Codegenerator, dort fügen den Inhalt der Zwischenablage in das Eingabefeld "Versatz(Klick)" ein.
    Über die Schaltfläche "Kopieren" erhalten Sie in der Zwischenablage einen neuen Quelltext, den Sie im Skript anstelle des gelb hinterlegten Textes der ersten Abbildung einfügen.
     

Anstelle der in der 1. Abbildung aufgeführten letzten Skript-Zeile verwenden Sie den folgenden Code:
Button1.WaitClick
Dadurch wird ein Mausklick auf die Schaltfläche ausfgeührt, falls der zu überprüfende Bildschirmausschnitt innerhalb von 3 Sekunden nach Erscheinen des Dialogfensters verifizierbar ist.

Fazit für die Variante:
In der Bildschirmlupe kann der Initialisierungscode für das Button-Objekt so vorgegeben werden, dass die Click-Methode nicht auf die Mitte des zu überprüfenden Bildschirmausschnitt zielt, sondern mit einem entsprechenden Versatz erfolgt (d.h. in unserem Beispiel auf die gewünschte Schaltfläche).

 

 

[Zurück][Nach oben][Weiter]

Copyright(c) 2007 Uta Nerger. Alle Rechte vorbehalten.