Der universelle Befehl AGR\

Moderator: MVogt

Post Reply
User avatar
Theo_Gottwald
Posts: 367
Joined: 03. Oct 2009, 08:57
Location: Herrenstr.11 * 76706 Dettenheim
Contact:

Der universelle Befehl AGR\

Post by Theo_Gottwald » 22. Jun 2016, 10:05

Der MPR hat viele Befehle, und einen Tausendsassa davon möchte ich heute mal näher vorstellen.
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
[/size]

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
[/size]

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
AGR\ unterstützt die Lokalisierung (Suche von Elementen)
- 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"
Das ist aber noch nicht alles. AGR\ unterstützt sogenannte "Rollen-Gruppen". Das bedeutet man kann dem Befehl sagen, nur in bestimmten Gruppen von Steuerlementen zu suchen. Ohne eine konkrete Role an zugeben.

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.
Die Syntax von AGR\ lautet:

Code: Select all

AGR\[Wait (sec)|][#]Role[!RP][\Name][\Value][\Number][\Flag][:Label]     []=optional
[/size]

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\

Bei der Befehlsausführung wird (je nach Internet Explorer) automatisch der aktuelle Punkt gesetzt und das gefundene Element in die Bildmitte gescrollt.

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
Hier ein Beispiel das zeigt wie einfach der AGR\ Befehl auch "von Hand" codiert werden kann.

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
Hier ein Codebeispiel aus einer Deinstallation wo sowohl AFO\ als auch AGR\ verwendet werden.
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
Die einfachen Operatoren können beliebig oft wiederholt werden, also:

Code: Select all

{Text1&OR:Text2&OR:Text2&OR:Text2&OR:Text2... usw.}
Es gibt keine Beschränkung auf 2 Operatoren wie bei bei AFO\(?), STW\ etc.
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}
Neu hinzugekommen ist der fortschrittliche "Tippfehler-Operator"
Beispiel:

Code: Select all

{Text1&FUZZY:5} 
Die Zahl hinter dem "&FUZZY:" gibt an, wie oft man sich vertippen darf, so dass der Text trotzdem erkannt wird.

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}
Bei allen Operatoren kann jeweils das &DOCAPS: verwendet werden. Dadurch wird die jeweilige Klammerebene auf Gross/Klein-Schrift umgeschaltet, berücksichtigt dann also Gross- und Kleinschreibung.

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\
Diese Operatoren können auch aneinandergereiht werden, zum Beispiel wenn wir "Computer Partner News" suchen:

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}}
Der Flag-Parameter

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.
Standardmäßig werden bei der Suche alle Elemente berücksichtigt, auch diejenigen, die außerhalb des Sichtbereichs (des Kindfensters) liegen. Das läßt sich mit dem Parameter Flag beeinflussen:
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.
Last edited by Theo_Gottwald on 22. Jun 2016, 18:39, edited 3 times in total.

LightTempler
Posts: 409
Joined: 23. Aug 2010, 13:47
Contact:

Re: Der universelle Befehl AGR\

Post by LightTempler » 22. Jun 2016, 17:05

Coole Anleitung, VIELEN dank!

User avatar
Theo_Gottwald
Posts: 367
Joined: 03. Oct 2009, 08:57
Location: Herrenstr.11 * 76706 Dettenheim
Contact:

Re: Der universelle Befehl AGR\

Post by Theo_Gottwald » 22. Jun 2016, 19:14

Ich verwende den AGR\ Befehl inzwischen bei fast jeder Automatisierung.
Der Befehl sieht auf den ersten Blick etwas "kompliziert" aus,
aber nur so lange bis man alle Parameter verstanden hat.

Apropos alle Parameter, den "Number" Parameter habe ich oben nicht erwähnt.
Dieser Parameter ist standardmäßig "1", das bedeutet dass der Befehl das "erste passende Element" zurückliefert.
Gibt man eine andere Zahl an, kann man Element Nr. 2,3 oder 99 anfahren.

Das kann je nach CPU und Größe der WEB-Site eine ganze Weile dauern.
Ein anderes interessantes Feld ist, daß AGR\auch Elemente suchen (und im Debug-Modus also mit Flag "4" auflisten und mit RoleParameter sogar klicken kann), die der normale User nie zu Gesicht bekommt (unsichtbare Elemente).

Nach dem man dann AGR\ anwenden kann, empfielt sich der Blick in die Befehlsgruppe AFO\ und dann ANT\.
Mit ANT\ kann man von einem Element das man lokalisiert hat, nach "recht, links, oben oder unten" navigieren und so eine Element anfahren, das keine definierten Eigenschaften hat (nur seine Role und seine Position).
Das könnte typischerweise ein leeres Textfeld sein, zum Beispiel das Login von der Arbeitszeiterfassung oder vom Homebanking.

Ist man dann so weit, kann man sich leicht ein Skript machen, dass übliche Klickereien auf WEB-Seiten, egal ob Facebook, oer XING automatisch erledigt. Wobei im letzteren Fall man etwas vorsichtig sein muß nicht zu viele Profile zu browsen, da die Anzahl der aufgerufenen Profile von dort "gemonitort" wird, wie ich bei Tests der Befehle einmal feststellen konnte.

User avatar
Theo_Gottwald
Posts: 367
Joined: 03. Oct 2009, 08:57
Location: Herrenstr.11 * 76706 Dettenheim
Contact:

Re: Der universelle Befehl AGR\

Post by Theo_Gottwald » 01. Jul 2016, 15:01

Hier ein weiteres Beispiel wie man den AGR\-Befehl nutzen kann.
Thema PopUp-Menüs. Zum Beispiel solche im Explorer.

Dieser Befehl klickt dank dem "AGR\33" an einer Stelle im Fenster, wo man eine Menü bekommt - also nicht auf ein Icon.

Code: Select all

STW\CabinetWClass\Arisaka
AGR\33!WII.|||1|3|60
MRC\
Klickt in einem Menü auf "Copy":

Code: Select all

STW\#32768\*
AGR.12!MLI.|Copy
Beispielvideos mit dem SPR (ist beim MPR alles ähnlich):

Automatisierte Katalog-Erstellung

Screenshots machen:

Icon-Erstellung:

Im Grafikprogram:

PS: Einige dieser Icons aus dem Video- werden zukünftig vom MPR aus via "Compiler-Direktive" verfügbar sein.
Neben der Möglichkeit auch eigene Icons für die kompilierten EXE-Dateien zu verwenden.

Post Reply

Return to “Package Robot”

Who is online

Users browsing this forum: No registered users and 6 guests