Es ist der Befehl der Ihnen das Tor zur visuellen Automatisierung weit aufstößt.
Stellen Sie sich einen Befehl vor, dem Sie einfach einen Text geben, und der dann diesen Text "sucht".
Wurde der Text gefunden, können sie direkt mit der Maus da hin fahren.
Der Befehl heißt:
Code: Select all
AFT\[Wait (sec)|]Text[\Role][\Number][\Flag] []=optional
Er ist der kleine Bruder des Befehls den wir uns heute ansehen. Und das ist:
Code: Select all
AGR\[Wait (sec)|][#]Role[!RP][\Name][\Value][\Number][\Flag][:Label] []=optional
Es ist ein Befehl mit dem sie die Meisten Komponenten in einer GUI direkt anfahren können: "AGR\".
Er hat eine eingebaute "Sprungmarke" wenn etwas nicht innerhalb bestimmter Zeit gefunden wurde.
Hier konkret als Beispielcode:
Code: Select all
' 45 - Wartezeit in Sekunden
' 44 - Role
' x - Roleparameter für MEL\
' {&EXACT:Google Chrome mit CCleaner anbieten} -> Name-Parameter nach dem Gesucht wird mit Suchpattern (s. unten)
' {&NOTEXT:} - Value Parameter
' Number und Flag wurden nicht angegeben
' :Always - Label zu dem Gesprungen wird, wenn Fehler auftritt
AGR\45|44!x\{&EXACT:Google Chrome mit CCleaner anbieten}\{&NOTEXT:}\\:Always
- in Office-Programmen,
- in Browsern, wie dem "Internet Explorer",
- und auch die Windows Oberfläche kann an den Meisten Stellen mit AGR\ "bedient" werden.
- und teilweise auch Firefox.
Wir empfehlen Automatisierungen in Browsern mit dem Internet Explorer zu machen, da hier alle Features von AGR\ zur Verfügung stehen.
Und AGR\ ermöglicht die "Fokuslose Bedienung".
Noch Mal zur Erinnerung: Normalerweise kann nur EINE Person an EINEM Computer arbeiten.
Denn in dem Moment wo sie in einem "Fenster schreiben" gehen alle Eingaben - zum Beispiel der Tastatur oder Maus - "in dieses Fenster", das nennt sich "Eingabefokus".
Da wo man das in AGR\ eingebaute Feature "RoleParameter" nutzen kann, kann man sogar eine "Fokuslose Bedienung" machen. Das bedeutet, AGR\ kann "nebenher" im Browser Dinge anklicken, während sie an einem Text schreiben!
Hier ein Beispiel wie AGR\ ohne Eingabefokus "parallel zum Benutzer" etwas tun kann.
Focuslose Bedienung mit AGR\
Hierzu müßen ein paar Sachen beachtet werden, zum Beispiel daß man innerhalb von dem Skript - genau anders als sonst - keine Befehle benutzt, die einen Eingabefokus setzen. Ich würde daher sagen, dass dies ein fortgeschrittenes Feature ist.
Aber fangen wir von vorne an.
Bevor man nun mit AGR\ ein "Element" - sei es ein Button, Hyperlink, Textfeld - oder anderes "anfahren" und ggf. darauf klicken kann, muß man dem Robot zu erst sagen in welcher Anwendung - also in welchem "Top-Fenster" er suchen soll.
1. Anwendung spezifizieren (STW\)
2. Bedienelement spezifizieren (AGR\)
3. optional Bedienung ausführen oder Element auslesen
Also ist die Reihenfolge mindestens so:
STW\Fensterklasse\Fenstertext
AGR\(Daten)
...
Info:Was ist eine Role?
Jedes Element hat unter Windows eine "Role". Diese kann zum Beispiel "Button" oder "Textfeld" sein. Dieser Role ist eine bestimmte Zahl zugeordnet. Diese zeigt der ACC-Analyzer an wenn man mit der Maus über dem anzufahrenden Element steht. Man schreibt diese Zahl, die der ACC-Analyzer anzeigt einfach in das Feld hinter dem AGR\.
Dabei ist AGR\ so was wie eine "Ein-Mann Musik-Kapelle", denn er lokalisiert nicht nur Elemente, sondern er kann auch noch selbst darauf klicken. Dazu dient der "RoleParameter".
Das ist ganz einfach nur ein "!" das man hinter die Zahl in dem Feld "Role" schreibt. Und dahinter welche Art von Klick oder Bedienung man haben möchte.
Code: Select all
Mit der Angabe eines RoleParameters (RP) im Anschluß an Role und abgetrennt durch ein "!" können Sie nach der Lokalisierung noch eine Aktion ausführen lassen, sofern das lokalisierte Element dies unterstützt (einige Möglichkeiten sind nur bei Listenelementen sinnvoll). Es können mehrere Parameter hintereinander angegeben werden:
a - Setze Fokus
b - Selektion
c - Erweiterte Selektion
d - Addiere Selektion
e - Entferne Selektion
f - Setze Fokus & Selektiere ("Klick")
g - Setze Fokus & Erweiterte Selection ("Shift-Klick")
h - Setze Fokus & Selektion ("Strg-Klick")
i - Setze Fokus & entferne Selektion ("Cancel Selection")
j - MER\
k - AddSelect & Extendedselect ("Multiselect")
m - Default Action
n - Double Default Action
o - MLC\
p - Double Default Action mit kleiner Pause dazwischen
q - Setze Mauszeiger kurzzeitig auf Elementmitte
r - Setze Maus auf Zielobjekt, dann Default Action
s - Setze Maus auf Zielobjekt, dann Double Default Action
t - Setze Wartezeit für Option w auf "Infinite"
u - MDC\
v - MRC\
w - Warte bis Fenster eingabebereit (max. 60 Sekunden)
x - MEL\
y - verhindere/invertiere "Mauspositionierung über Schaltfläche"
Code: Select all
Wenn vor dem Zahlenwert ein "#" angegeben ist, wird der Role-Wert als Gruppe mehrerer Roles interpretiert:
0: unknown
1: User-bedienbare Controls
2: Panels, Client und Background
4: Borders etc.
8: Window-Controls (Titlebar, Minimize etc.)
16: Scrollbars
32: Spezial, Cursor, Sound etc.
Code: Select all
AGR\[Wait (sec)|][#]Role[!RP][\Name][\Value][\Number][\Flag][:Label] []=optional
Ob das gesuchte Element gefunden wurde, kann mit dem Befehl IIF\ ... EIF\ festgestellt werden.
Oder man verwendet den ":Label" Parameter. Wird ein Element nicht gefunden, springt der Befehl nach 30 Sekunden bzw. nach der angegebenen Wartezeit zu dem "Label".
Um mit AGR\ auf das Erscheinen eines Elementes auf einer WEB-Site zu warten würde man so vorgehen:
Beispiel:
Code: Select all
' Erst Mal alle Internet-Explorer die schon da sind schliessen
CAW\ieframe\theo
' Neues Browserfenster mit einem bestimmten Link starten
BOP\www.fa2.de
' Warten bis die Seite aufgebaut ist
WSC\
' Fenstergröße einstellen und Fensterhandle in Variable speichern
SWP\12,2|775,932
HTV\$$MYW
:Lab
' Fenster lokalisieren
SCW\$$MYW
' Button "Login" suchen
AGR\42\Login
IIF\
' erneut suchen
GOTO Lab
EIF\
' Element anfahren, wenn Element vorhanden ist
MMV\
Sehen wir uns noch kurz an, woher man die Parameter für das AGR\ bekommt.
Dazu gibt es ein Tool, den ACC\-Analyzer.
Er zeigt die Parameter des Elementes an, das unter dem Mauszeiger liegt.
Gibt man diese Parameter bei AGR\an, dann sucht AGR\ dieses Element.
Es gibt hierzu ein Beispielvideo
Browser-Steuerung mit AGR\
Hier ein Code-Beispiel aus einer Setup-Installation, wo es darum geht bestimmte Werbungen zu überspringen (nicht zu installieren).
Code: Select all
' No.:13 | Time: 09:47:14 | Ticks: 1394
VAR\$$PRO=10013
STW\#32770\CCleaner v3.01 Installation|w45
SWP\772,526|503,393
GCW\\5\Internet Explorer_Server\|w45
SAW\
' 45 - Wartezeit in Sekunden
' 44 - Role
' x - Roleparameter für MEL\
' {&EXACT:Google Chrome mit CCleaner anbieten} -> Name-Parameter nach dem Gesucht wird
' {&NOTEXT:} - Value Parameter
' Number und Flag wurden nicht angegeben
' :Always - Label zu dem Gesprungen wird, wenn Fehler auftritt
AGR\45|44!x\{&EXACT:Google Chrome mit CCleaner anbieten}\{&NOTEXT:}\\:Always
' MPO\o\34,160
MEL\
WSC\30
Code: Select all
STW\avp\Wizard
AGR\45!m\trial
STW\avp\Wizard
AGR\43!om\next
STW\avp\Wizard
AGR\10|45!om\i prefer
Statt Roleparameter wird der Befehl ADA\ (Do Default Action) verwendet.
Je nach Anwendung kann das eine oder das Andere besser sein.
Code: Select all
' No.:1 | Time: 16:20:49 | Ticks: 0
VAR\$$PRO=10001
' Please choose the Line that suits best to your needs.
' EXU\CorelDRAW(R) Graphics Suite X5 15.2.0.661|u
EXS\?progs\Corel\CorelDRAW$SP$Graphics$SP$Suite$SP$X5\Setup\SetupARP.exe$SP$/arp
CAS\5
' No.:2 | Time: 16:21:07 | Ticks: 554
VAR\$$PRO=10002
STW\#32770\coreldraw graphics suite x5|w213
SPC\internet explorer_server\*|w213
''? AFO=AccessibilityFindObject
'AFO\45\Programm entfernen$crlf$&&Computer entfernen.\notext\notext\8\\'*0/16\'20,20\77,375
''? BTC=ButtonCheck
'BTC\1
AGR\88|45\Programm entfernen$crlf$CorelDRAW Graphics Suite X5 von Ihrem Co\{&NOTEXT:}\\:Always
' MPO\o\87,385
ADA\
' No.:3 | Time: 16:21:15 | Ticks: 802
VAR\$$PRO=10003
STW\#32770\CorelDRAW Graphics Suite X5|w45
SWP\113,59|798,610
GCW\\3\Internet Explorer_Server\|w45
SAW\
AGR\45|44\Benutzerdateien entfernen$crlf$Benutzerdateien (Arbeitsbereiche)\{&NOTEXT:}\\:Always
' MPO\o\136,424
ADA\
' No.:4 | Time: 16:21:23 | Ticks: 1040
VAR\$$PRO=10004
STW\#32770\CorelDRAW Graphics Suite X5|w45
SWP\113,59|798,610
GCW\\3\Internet Explorer_Server\|w45
SAW\
AGR\45|43\{&EXACT:Entfernen}\{&NOTEXT:}\\:Always
' MPO\o\716,573
ADA\
Es gibt in der Gruppe der AGR\-Befehle auch noch die Befehle: AFD\, AFS\, AFV\ und AFT\ .
AGR\ verwendet weiterentwickelten Suchmuster, die noch mehr Möglichkeiten bieten als die Standard-Patterns:
Code: Select all
{&DOCAPS:} {&0:} {&DOCAPS:ExPE} -> Gross-Kleinschreibung beachten.
{&OR:} {&1:} {Text1&OR:Text2} -> A oder B oder beides
{&XOR:} {&2:} {Text1&XOR:Text2} -> A oder B
{&AND:} {&3:} {Text1&AND:Text2} -> A und B Reihefolge egal
{&ANDTHEN:} {&4:} {Text1&ANDTHEN:Text2} -> A dann B
{&FUZZY:} {&5:} {{Text1}&FUZZY:[value]} -> ungefähr A
{&TOLERANT:} {&6:} {{Text1}&6:[value]} -> A zu min. X%
{&NOT:} {&7:} {&NOT:{Text1}} -> Darf nicht vorkommen
{&EXACT:} {&8:} {&EXACT:Text1} -> genau A (Ohne Grossklein)
{&NOTEXT:} {&9:} {&9:}
{&t:} - Always True
{&f:} - Always False
Code: Select all
{Text1&OR:Text2&OR:Text2&OR:Text2&OR:Text2... usw.}
Dadurch sind beliebig viele Internationalisierungen im gleichen Script möglich!
Das {&EXACT:Text1}-Pattern ersetzt das Standard-Suchmuster "Text1&&" (&& am Ende).
Prinzipiell sind auch Verschachtelungen möglich, solange man die Klammern korrekt setzt,
Also zum Beispiel:
Code: Select all
{{{Text1&ORText2}&ANDTHEN:{Text1&ORText4}}&ANDTHEN:Text2}
Beispiel:
Code: Select all
{Text1&FUZZY:5}
Ebenso neu hinzugekommen ist der "TOLERANT" Operator.
Hierbei wird ein %-Zahl angegeben, die die Wortähnlichkeit angibt ab der Text der Bedingung entspricht oder nicht.
Beispiel:
Code: Select all
{&TOLERANT:89}
Beispiele:
Code: Select all
' Ein Button mit der Beschriftung "Senden" soll lokalisiert werden, es genügt die Angabe eines Teils
' der Beschriftung um den Button zu lokalisieren
STW\opusapp\ - nachricht|w30
GCW\0\3\#32770\*|w30
AGR\43\Sende
MMV\
' Der Button heißt "Senden" ohne Groß- Kleinschreibung zu unterschieden.
' Ein Button mit der Beschriftung "Senden" soll lokalisiert werden
' Würden wir hier auch nur "Sende" angeben (ohne "n") würde der Button nicht gefunden!
STW\opusapp\ - nachricht|w30
GCW\0\3\#32770\*|w30
AGR\43\&EXACT:Senden
MMV\
' In diesem Beispiel wollen wir dass auch Gross- Kleinschreibung berücksichtigt wird.
' Dazu verwenden wir den "&DOCAPS: -Operator.
' Würden wir hier &EXACT:&DOCAPS:SEnden angeben als Parameter, würde der Button nicht gefunden!
STW\opusapp\ - nachricht|w30
GCW\0\3\#32770\*|w30
AGR\43\&EXACT:&DOCAPS:Senden
MMV\
' Nun wenden wir uns einer WEB-Site zu, sicherlich ein Haupt Einsatzgebiet für AGR\
' Hier suchen wir einen Text (Role 42), der die Worte "Hardware" und "Journal" enthält.
' Dabei achten wir nicht auf Gross-/Kleinschreibung
CAW\ieframe\theo
BOP\www.fa2.de
WSC\
SWP\12,2|775,932
AGR\42\Hardware&AND:Journal
MMV\
' Allerdings würde im vorigen Beispiel auch ein Text "Journal der aktuellen Hardware" gefunden werden.
' das wollen wir nicht, daher nehmen wir den &ANDTHEN: Operator.
' Nun muss der zweite Term nach dem ersten im Text stehen!
CAW\ieframe\theo
BOP\www.fa2.de
WSC\
SWP\12,2|775,932
AGR\42\manager&ANDTHEN:magazin
MMV\
Code: Select all
CAW\ieframe\theo
BOP\www.fa2.de
WSC\
SWP\12,2|775,932
AGR\42\ompu&ANDTHEN:ner&ANDTHEN:ews
MMV\
' Oder auch mit berücksichtigung der Gross- und Kleinschreibung im jeweiligen Term:
AGR\42\ompu&ANDTHEN: &DOCAPS:ner&ANDTHEN:&DOCAPS:ews
oder auch komplexer:
AGR\42\{&DOCAPS:Computer&AND:{ompu&ANDTHEN:&DOCAPS:ner&ANDTHEN:&DOCAPS:ews}}
' Die AGR\Suchpattern kann man abkürzen, um Schreibarbeit zu sparen.
' Im Fall oben würde das so aussehen, wäre allerdigns schlechter verständlich.
AGR\42\{&0:Computer&3:{ompu&4:&0:ner&4:&0:ews}}
Code: Select all
1 - only Objects,
2 - only Simple Elements
4 - display internal info while searching.
8 - if set, then elements with the STATE_SYSTEM_INVISIBLE will also be found.
16 - if set, then elements with the STATE_SYSTEM_INVISIBLE
or the STATE_SYSTEM_UNAVAILABLE will also be found. Needed for Setup automation, like MS-Office 2010 or higher.
32 - NoScroll-Flag. Using this Flag, you can permit AGR to scroll in the Internet Explorer.
Wenn das gesuchte Element innerhalb des Kindfensters liegt, können Sie die Suche mit Flag = 8 beschleunigen.
Wenn Sie generell nur nach sichtbaren suchen wollen, geben Sie als Flag den Wert 16 an.
AGR\ bezieht sich auf das zuletzt lokalisierte Fenster. Bei der Befehlsausführung wird das gefundene Element - sofern möglich - in die Bildmitte gescrollt und der aktuelle Punkt auf die Mitte des Elements gesetzt.
Hint: Gelegentlich findet der AGR\-Befehl in WEB-Seiten auch "unsichtbare" Elemente. Durch Ehöhung des Number-Parameters werden diese dann übersprungen. Wenn man Details zu den gefundenen Elementen sehen möchte, kann man das "4"-Flag angeben. Bei Flags gilt: Einfach alle zahlen zusammenrechnen. Also wenn man die Flags 8+4 möchte, gibt man die 12 an. Gibt es das Problem, dass AGR\ trotz Angabe von einer Wartezeit scheinbar in einer Endlosschleife verschwindet, sollte man an dieser Stelle den Befehl AFV\ verwenden.
FAZIT:
Allein durch Verwendung von STW\ und den Befehlen der AGR\-Gruppe lassen sich schon die Meisten Sachen machen!
Man kann damit wahrscheinlich FAST ALLE Elemente in Windows Anwendungen lokalisieren!
Man muß also gar nicht sooo viele der 800 MPR Befehle kennen um mit dem MPR fast alles machen zu können.
Es reicht wenn man diese zwei schon mal versteht und anwenden kann.
Daher lohnt es sich den AGR\-Befehl genauer anzusehen und mal in Ruhe auszuprobieren.
Insbesondere auch die Option mit dem IIF\ oder dem Laber ermöglichen auch noch, intelligente Skripte, die auf Änderungen in Oberflächen reagieren und Schritte auslösen oder überspringen.