Easter-Egg Befehle im MPR Part VIII - "Java-basierte Setups"

Moderator: MVogt

Easter-Egg Befehle im MPR Part VIII - "Java-basierte Setups"

Beitragvon Theo_Gottwald » 06. Mär 2017, 15:08

Die folgenden Befehle sind überschrieben mit "Java-basierte Setups".

1.Diese Befehle funktionieren auch mit vielen anderen Programmen.
Wichtig ist die verwendete Schriftart.

Zum Beispiel kann man auch bei Google-Chrome die Schriftart auf Tahoma umstellen, dann kann man diese Befehle auch verwenden, um in Chrome Dinge zu automatisieren.

Ein Kunde hat diese Befehle früher auch schon Mal für Automatisierungen im Bankenbereich verwendet.
Auch dort haben die Kunden Masken von "Fiducia", wo die einzelnen Filialen wenig Einfluß haben.
Mit dem MPR kann man Macros (Buttonbar) zu solchen Anwendungen hinzufügen.

Grundsätzlich wichtig ist das neue Programm "Cleartype Switch". Das Tool kann man bei mir erhalten, ansonsten wird es auch ab dem kommenden Update im MPR Paket enthalten sein.
Um diese Befehle zu nutzen muß man damit das Cleartype ausschalten, das kann natürlich auch direkt im Skript geschehen.
Wenn man das Tool in das Script einbindet. Dies ist notwendig da der MPR sonst den Text nicht erfassen kann.

2. Hier ein Video das zeigt, wie so ein MPR-"Spezial-Skript" funktioniert.
Java-basiertes Setup mit dem MPR automatisieren

Diese Befehle sind noch nicht final und wurden damals als "Alpha-Version" implementiert.
Sie sind in keiner Hilfe enthalten und offiziell nicht vorhanden.

Da eine Weiterentwicklung derzeit beim MPR nicht sicher ist, möchte ich diese Befehle "as is" auf diesem Weg für die Anwender schon einmal nutzbar machen.


'******************************************************************************
Graphical Recognition Commands
'******************************************************************************


Diese Befehle dienen dazu, in einem Setup oder einer anderen Programm-Maske Elemente zu lokalisieren oder auf das Erscheinen dieser Elemente zu warten.
Falls dazu Text verwendet wird, wird dazu in zwei Schritten verfahren:
1. Analyze (Parameter)
2. Locate Object

Alternativ kann auch zusätzlich navigiert werden. Hierbei wird ein Objekt lokalisiert und dann mittels der "g_navigate" Anweisung ein Objekt angefahren.
Dabei wäre die Verfahrensweise dann so:
1. Analyze
2. Locate
3. Navigate ...

Unabhängig davon, was lokalisiert wurde, stehen die Koordinaten der Kanten des lokalisierten Elementes jeweils auch über die MPR-Spezialvariablen zur Verfügung:
Code: Alles auswählen
$il$ = Linkskoordinate  (ItemLeft),
$it$ = Obenkoordinate   (ItemTop),
$ir$ = Rechtskoordinate (ItemRight),
$ib$ = Untenkoordinate  (ItemBottom),
$iw$ = Breite           (ItemWidth),
$ih$ = Höhe             (ItemHeight),

(Siehe Hilfe "Spezialordner")


Wird eine Farbdifferenz oder ein Farbkontrast verlangt, ist die übliche Reichweite 0-765.
0 - wäre die genau gleiche Farbe, während die Maximaldifferenz bzw. der Maximalkontrast (also weiss-schwarz) 765 ist.

****************************
"ana.","g_analyze"
****************************


Dieser Befehl analysiert die Fensteroberfläche. Dies ist notwendig zur Vorbereitung späterer Suchbefehle.
Der Befehl teilt die Oberfläche des lokalisierten Fensters in Quadranten ein, und ermöglicht die Angabe in welchen der Quadranten gesucht werden soll.
Zudem ermöglicht der Befehl eine graphische Anzeige, welche Objekte mit den späteren Suchbefehlen lokalisiert werden können.

Der Befehl benötigt dazu eine Anzahl Parameter:
Code: Alles auswählen
' TF:Textfarbe, Defaultwert ist 0 = schwarz - optional
' TL:Toleranzwert, Defaultwert 150
' PD:Pixeldistanz, 4-48, Defaultwert 6 - optional
' WH:Window Handle - optional, Default ist das zuletzt lokalisierte Fenster
' MS:Feldmaske, Default 0 - keine Einschränkung
' FL:Flags 0/1 - Picture-Mode Rest, s.u.
' GRN\g_analyze|[TF:0][,PD:4-48][,TL:150][,WH:32423][,MS:Feldmaske]


Dabei wird die Maske wie folgt in 16 Felder eingeteilt:
A1,A2,A3,A4
B1,B2,B3,B4
C1,C2,C3,C4
D1,D2,D3,D4


Damit kann man angeben, in welchen Feldern später gesucht werden soll.
Ebenso kann man angeben, ob Objekte vollständig oder nur überwiegend in den angegebenen Feldern liegen müssen oder ob es genügt, wenn das Objekt partiell im Feld liegt.
Diese Angaben macht man bei der Vorbereitung der Maske mittels "g_mask".

Beim Parameter MS: hat man die Wahl, die Felder entweder direkt anzugeben, dazu müssen Klammern wie folgt verwendet werden:
Code: Alles auswählen
GRN\g_analyze|MS:(A1,A2,A3,p)


oder man kann eine vordefinierte Maske aus einer Variablen benutzen, die zuvor mittels "g_mask" vorbereitet wurde.
Dieses Verfahren erlaubt es diverse Masken in Variablen vorzuhalten.
Code: Alles auswählen
VAR\$$ARS=A1,A2
' Feldmaske vorbereiten und in $$TXT ablegen
GRN\g_mask|$$ARS|p>$$TXT
GRN\g_analyze|PD:8,FL:12,TL:50,MS:$$TXT


Beispiele:

Code: Alles auswählen
' Direktangabe der Maske
' GRN\g_analyze|MS:(A1,A2,A3,p),TL:100

' repeat last analyze run with same parameters   
' GRN\g_analyze|R
' or
' GRN\g_analyze|Repeat

' Komplettes Beispiel
' Diese Felder werden durchsucht
VAR\$$ARS=A1,A2
' Feldmaske vorbereiten und in $$TXT ablegen
GRN\g_mask|$$ARS|p>$$TXT

STW\shimgvw:cpreviewwnd\
GRN\g_analyze|PD:8,FL:12,TL:50,MS:$$TXT
GRN\fba.|Summen
MMV\


Flags - Bedeutung:
Code: Alles auswählen
' 1 - Win7-Mode
' 2 - ToGrey
' 4 - Cleartype Mode
' 8 - Debug Mode, Draw Letterboxes
' 16 - Invert Boxes
' 32 - Draw Fields 


****************************
"msk.","g_mask"
****************************


Mit diesem Befehl kann man den Suchbereich in der Maske auf bestimmte Felder einschränken.
Dabei wird die Maske/das Suchfenster wie folgt in 16 Felder eingeteilt:
Code: Alles auswählen
A1,A2,A3,A4
B1,B2,B3,B4
C1,C2,C3,C4
D1,D2,D3,D4


Man kann nun angeben welche Felder für die spätere Suche initialisiert werden sollen, alle anderen werden ignoriert.
Dazu kommt eine Angabe, ob Objekte vollständig, überwiegend oder nur teilweise in den angegebenen Feldern liegen müssen.
Es genügt dazu die Angabe eines Buchstabens, dieser gilt immer für alle Felder:

p - partiell, f - full, m - much (bedeutet mehr als die Hälfte muss "inside" des Feldes sein.

Für die Spezifikation der Felder gibt es prinzipiell zwei Möglichkeiten. Die additive und die subtraktive.

Die additive Maskenangabe:
Hierbei werden einfach die Felder aufgelistet, die durchsucht werden sollen.

Beispiel:
Code: Alles auswählen
' gesucht wird in A1 und A2, die Objekte müssen nur "p"artiell in den Feldern enthalten sein.
VAR\$$ARS=A1,A2
GRN\g_mask|$$ARS|p>$$TXT


Die subtraktive Maskenangabe:
Hierbei werden nur die Felder aufgelistet, die NICHT durchsucht werden sollen. ALLE anderen werden durchsucht.
Wird ein Feld als "subtraktiv" angegeben, sind automatisch alle weiteren Angaben auch subtraktiv!

Beispiel:
Code: Alles auswählen
' gesucht wird in allen Feldern außer A1 und A2, die Objekte müssen vollständig in den Feldern enthalten sein (wegen des "f").
VAR\$$ARS=!A1,A2
GRN\g_mask|$$ARS|f>$$TXT


****************************
"usp.","g_use_place"
****************************

Mit diesem Befehl kann ein beliebiger Punkt in der Maske spezifiziert werden, von wo aus dann mit dem "g_navigate" Befehl ein Element angefahren werden kann.
Die Angaben erfolgen in fensterrelativen Koordinaten, die aus dem Windows Analyzer ermittelt werden können.

Beispiel:
Code: Alles auswählen
' Element "Standardmappe" lokalisieren
GRN\g_use_place|389,292
GRN\g_navigate|RA|1

Beispiel:
VAR\$$ARS=!D1
GRN\g_mask|$$ARS|p>$$TXT
STW\shimgvw:cpreviewwnd\

GRN\g_analyze|FL:6,PD:6,PM:6,TL:10
GRN\g_use_place|389,292
GRN\g_navigate|RA|1
MMV\


****************************
"nav.","g_navigate"
****************************

Dieser Befehl dient dazu, von einem lokalisierten Objekt aus ein danebenliegendes anderes Objekt anzufahren.
Dies ist sinnvoll, um auch solche Objekte anzufahren, die man anders nicht sicher lokalisieren kann.
g_navigate berücksichtigt intern den Abstand zwischen dem aktuell lokalisierten Element und den in Frage kommenden Elementen.
Daher kann man auch noch eine Nummer angeben, die angibt das wievielte Element (rechts, links etc.) man anfahren will.
Dies kann zum Beispiel genutzt werden, um in Tabellen Elemente zu überspringen.
Code: Alles auswählen
GRN\g_navigate|[Richtung]|[Nummer][|cc-Wert]


Für die Richtung gibt es folgende Parameter:
A - All (jede Richtung)
R - rechts
L - links
U - Oben
D - Unten
Sowie Kombinationen:
LA, RA, UA, DA.

Der Unterschied liegt darin, dass ein Feld bei der Angabe von L,R,U,D innerhalb der jeweiligen Kante liegen muss um berücksichtigt zu werden.
Wird zusätzlich ein "A" angegeben, dann kann das Element "irgendwo" auf der jeweiligen Seite liegen.
In diesem Fall wird nur noch der absolute Abstand der Elemente (Kante zu Kante) berücksichtigt.

Beispiel:
' Das nächstliegende Element rechts vom aktuellen wird angefahren
GRN\g_navigate|RA

' Das viert-nächstliegende Element (A(ll) = Umkreis) wird lokalisiert
GRN\g_navigate|A|4


****************************
"fba.","g_find_bap"
****************************

Der Befehl g_find_bap dient dazu, in der Anwendung "Bank ArbeitsPlatz" (Fiducia) Elemente zu lokalisieren.
Die Schriftgröße kann dabei zwischen 7 und 14 Punkte variieren. Es wird direkt der jeweilige Text angegeben, der angefahren werden soll.

Code: Alles auswählen
GRN\g_find_bap|Suchbegriff|No.|Toleranzzahl für Textvergleich


Die Nummernangabe ist dann wichtig, wenn man nicht den ersten passenden, sondern einen anderen passenden Begriff finden will.
Die "Toleranzzahl für Textvergleich" ist per default 2 und je höher (max. 8) desto toleranter ist der Textmustervergleich. Dieser Wert ist unabhängig von der Farbtoleranz, die bei "g_analyze" verwendet wird.

Beispiel:
Code: Alles auswählen
GRN\g_find_bap|Standardmappe
MMV\


Beispiel mit Angabe eine alternativen Font-Namens:

Code: Alles auswählen
GRN\fba.|Cancel01|1|4|Courier New
ITO\
   OPR\0,0
   SBT\2|Not found.
ELSE
   MMV\
ETO\

MBX\!
@


****************************
"wba.","g_wait_find_bap"
****************************

Dieser Befehl dient dazu, auf das Erscheinen eines Suchbegriffes in der Maske zu warten.

Code: Alles auswählen
GRN\g_wait_find_bap|Suchbegriff|No.|Toleranzzahl für Textvergleich|Maximale Wartezeit in Sekunden


Es kann eine maximale Wartezeit in Sekunden angegeben werden; fehlt diese Angabe wird 30 angenommen.

Beispiel:
Code: Alles auswählen
' Es wird 6 Minuten auf das Erscheinen eines bestimmten Textes gewartet.
GRN\g_wait_find_bap|Übersicht|1|2|360
' bewirkt das Gleiche
GRN\g_wait_find_bap|Übersicht|||360


****************************
"set.","g_settings"
****************************

Dieser Befehl dient dazu interne Parameter zu setzen. Bei Angabe von:
TE:0 oder TE:1
wird zur Textfindung mittels "fba." oder "ftx." jeweils ein anderes Vergleichsverfahren verwendet.
Es ist denkbar dass zukünftig andere Verfahren dazukommen.
Das Standardverfahren ist derzeit TE:0.
Dieses Verfahren kann bei Fenstern mit vielen graphischen Mustern fälschlicherweise kleinen Text finden.
TE:1 arbeitet viel exakter, findet evtl. jedoch Text der nicht ganz genau übereinstimmt nicht.

Beispiel:
Code: Alles auswählen
STW\shimgvw:cpreviewwnd\
GRN\g_analyze|PD:4,FL:1,TL:1,TF:&H0,MS:$$TXT

GRN\set.|TE:1
GRN\fba.|Bestellung
MMV\

GRN\set.|TE:0
GRN\fba.|Belegübersicht ein
MMV\

eine weitere Option ist "RC:". Dieses Setting bestimmt die Auswahl der zu lesenden Zeichen für den "rab." Befehl.
Es stehen folgende Subsets und jede Kombination daraus zur Auswahl:

US-Letters_small: 1
US-Letters_big: 2
german Umlauts: 4
Zahlen: 8
Signs: 16
Kernings: 32

Code: Alles auswählen
' 39 = Kernings + Umlauts + small Letters + big Letters
GRN\set.|RC:39
GRN\rab.
MMV\


Der defaukt Wert für RC ist 39. Sollten in einem Block zum Beispiel NUR Zahlen gelesen werden, kann man das Setting auf "8" setzen.

Eine weitere Option ist "FA:" - "Font Attributes". man kann hier auswählen ob auch Text der:
1 - Normal
2 - Bold
4 - Kursiv
6 - Bold und Kursiv
7 - Normal, Bold und Kursiv
in die Suche mit einbezogen werden soll. Dies kann Einfkluss auf die Rechenzeit der Lesebefehle haben.

Die Option: "SS:" - "smallest Size" ermöglicht die Angabe einer minimalen Font-Suchgröße.
Intern ist die minimale Suchgröße auf den Wert "6" beschränkt. Kleinere Werte werden nicht berücksichtigt.

Die Option: "LS:" - "Largest Size" ermöglicht die Angabe einer maximalen Font-Suchgröße.
Intern ist die maximale Font-Suchgröße auf den Wert "22" festgelegt. Größere Werte werden nicht berücksichtigt.


****************************
"gfa.","g_get_found_size"
****************************

Dieser Befehl kann erst angewendet werden, nachdem ein Textsuch-Befehl wie afb. oder ftx. verwendet wurde.
Er gibt als Rückgabewert eine interne Schriftgröße zurück, in zwei verschiedenen Skalierungen, unter der der jeweilige Text lokalisiert wurde.
Zudem eine dritte Zahl zurückgegeben, dabei handelt es sich um einen Bold-Wert.

Code: Alles auswählen
VAR\$$ARS=!A1

GRN\g_mask|$$ARS|p>$$TXT
STW\shimgvw:cpreviewwnd\
'GCW\\1\shimgvw:czoomwnd\*|w74994
GRN\g_analyze|PD:6,FL:2,TL:10,TF:0,MS:$$TXT
GRN\fba.|Abbrechen||1
NTO\
   GRN\gfa.>$$TXT
   MBX\$$TXT
ETO\
@


****************************
"ftx.","g_find_text","graphic find text"
****************************
Dient zum Finden von Texten in JAVA-Setup-Programmen.

****************************
"wtx.","g_wait_find_text"
****************************


Dient zum Warten auf das Erscheinen von Texten in JAVA-Setup-Programmen.

Code: Alles auswählen
GRN\wtx.|(zu suchender Text[optional: Nummer bei mehreren][|optional Toleranz]

****************************
"fbn.","g_find_by_number"
****************************

Dieser Befehl kann zum Lokalisieren von Ojekten verwendet werden, die derzeit nicht gelesen werden können, jedoch als Blöcke angezeigt werden.
Dazu wählt man den erwarteten Quadranten aus und gibt die Blocknummer an.
Code: Alles auswählen
GRN\fbn.|(Nr. zu suchendes Element)


Beispiel:
Code: Alles auswählen
VAR\$$ARS=D3,D4
GRN\g_mask|$$ARS|p>$$TXT
STW\shimgvw:cpreviewwnd\
GRN\g_analyze|PD:6,FL:12,TL:10,TF:0,MS:$$TXT
GRN\fbn.|10
MMV\



****************************
"wbn.","g_wait_find_by_number"
****************************

Dieser Befehle entspricht "fbn." in der Version mit "wait".
Man kann damit zum Beispiel auf das Erscheinen von Buttons warten.
Code: Alles auswählen
GRN\wbn.|(Nr. zu suchendes Element)|(Timeout in Sekunden)


****************************
"gqn.","get_quadrant_rect_by_name"
****************************

Dient zum Ermitteln des Rechtecks (Koordinaten) eines Feldes.
Das Kommando lokalisiert das Feld, der aktuelle Punkt wird in die Mitte des Feldes gelegt.
Die Koordinaten der Kanten des Feldes stehen dann über die WinRobots-Spezialvariablen zur Verfügung:
Code: Alles auswählen
$il$ = Linkskoordinate  (ItemLeft),
$it$ = Obenkoordinate   (ItemTop),
$ir$ = Rechtskoordinate (ItemRight),
$ib$ = Untenkoordinate  (ItemBottom),
$iw$ = Breite           (ItemWidth),
$ih$ = Höhe             (ItemHeight),
(Siehe Hilfe "Spezialordner").

Beispiele:
GRN\get_quadrant_rect_by_name|A1
MMV\

GRN\get_quadrant_rect_by_name|D4
MMV\


****************************
"sco.","g_scan_object_at_point"
****************************

Dieser Befehl ermittelt das umschreibende Rechteck und den Mittelpunkt eines Objektes, typischerweise einer Textbox.
Dazu wird ein beliebiger Punkt innerhalb des Objektes angegeben, sowie optional eine Farbe und eine Farbtoleranz.
Wird als Farbe -1 angegeben, wird die Farbe an dem angegebenen Punkt als Referenzfarbe verwendet, wird die Farbtoleranz weggelassen, wird 180 als Defaultwert verwendet.
Der Befehl benötigt vorweg ein "g_analyze".

Beispiel:

Code: Alles auswählen
STW\shimgvw:cpreviewwnd\
GRN\g_analyze|PD:5,FL:1,TL:1,TF:&H8C5317

' Hier ist Weiss die Referenzfarbe, die Farbtoleranz ist 180
GRN\sco.|&HFFFFFF|333,242
MMV\

' Hier wird die Referenzfarbe ermittelt und die Farbtoleranz beträgt 100
GRN\sco.|-1,100|333,242
MMV\


****************************
"scr.","g_scan_object_right"
"scl.","g_scan_object_left"
"scd.","g_scan_object_down"
"scu.","g_scan_object_up"
****************************

Die Befehle dienen dazu, rechts/links/oben/unten liegende Textboxen zu lokalisieren.

Diese Lokalisierung erfolgt anders als die reguläre Lokalisierung der Texte.Daher ist eine Navigation mittels "g_navigate" nur von diesen Objekten zu anderen Objekten möglich.
Eine Navigation zu diesen Objekten ist nur mittels dieser Befehle möglich, nicht mittels "g_navigate".
Ausgenommen davon ist jeweils das zuletzt lokalisierte Objekt.
Es nimmt einen Sonderstatus ein, damit von diesem Objekt aus zu einem Textobjekt navigiert werden kann.

Der Befehl scannt nach rechts/links/oben/unten bis er ein Objekt/Punkt/Linie findet, die einen Farbkontrast zum Hintergrund in der angegebenen Stärke aufweist.
Er versucht dann den Umfang des Objektes zu ermitteln.

Code: Alles auswählen
GRN\scr.|(Kontrastwert beim Rechts-Scan]|[inside/outside]|[Farbtoleranz für Objekterkennung]|[Scanweite in Pixel oder 0]

+ Kontrastwert beim Scan - Wertbereich: 1-765, wird 0 angegeben, so wird der Defaultwert von 180 verwendet.
+ inside/outside Point - Wertebereich 0/1...10 - Falls die Objekte eine Umrandung haben, kann man durch Angabe von "1" erreichen, dass ein Punkt innerhalb des Objektes zur Ermittlung des Umfangs herangezogen wird.
Dies ist bei Tabellen erforderlich, da ein Scan des Randes dann die gesamte Tabelle erfassen wird.
Navigiert man Checkmarks, kann ein Wert von 2 hilfreich sein, da damit der Rand übersprungen wird.
+ Farbtoleranz für Objekterkennung - es ist möglich hier eine Farbtoleranz zwischen 0 und 765 anzugeben. Dadurch werden auch Objekte, die Farbübergänge enthalten, korrekt ermittelt.
Default ist der gleiche Wert wie beim Kontrastwert.
+ Scanweite: Default ist 1/2 der Bildbreite. Die Zahl rechnet ab Außenkante des aktuell lokalisierten Elementes.
Der Befehl benötigt ein g_analyze und ein lokalisiertes aktuelles 9er-Element.

Beispiel:

Code: Alles auswählen
VAR\$$ARS=!B4
GRN\g_mask|$$ARS|p>$$TXT

STW\shimgvw:cpreviewwnd\
GRN\g_analyze|PD:5,FL:1,TL:1,TF:&H8C5317,MS:$$TXT
' Von Text
GRN\fba.|Alle Firmen
MMV\
' Zu Checkmark
GRN\scl.|230|1|180
MMV\
' Zu Checkmark darunter
GRN\scd.|130|2|180
MMV\
' Zu Checkmark darunter
GRN\scd.|130|2|180
MMV\

@

' Beispiel feststellen ob ein Checkmark gesetzt ist:
VAR\$$ARS=!B1
' Verwenden Sie 2, 10 oder 26 als Flag!
CAL\$$FLG=3+0
GRN\g_mask|$$ARS|p>$$TXT
STW\shimgvw:cpreviewwnd\
GRN\g_analyze|PD:6,FL:$$FLG,TL:0,TF:&H0,MS:$$TXT
GRN\fba.|telefonisch durchgeführt
GRN\g_scan_object_left|80|2
' Aktueller Punkt ist nun in der Mitte der Checkmark
' Hole aktuellen Punkt (Mitte Checkmark)
VAR\$$XPA=$ix$
VAR\$$YPA=$iy$

' kleines Rechteck drumherum ermitteln
CAL\$$XLI=$$XPA-3
CAL\$$XRE=$$XPA+3
CAL\$$YOB=$$YPA-3
CAL\$$YUN=$$YPA+3

' Toleranz für IRC auf 20% Festlegen
CTO\20
IRC\$$XLI,$$YOB,$$XRE,$$YUN|&H0
   MBX\Gesetzt
ELSE
   MBX\Nicht gesetzt
ERC\
Benutzeravatar
Theo_Gottwald
 
Beiträge: 273
Registriert: 03. Okt 2009, 08:57
Wohnort: Herrenstr.11 * 76706 Dettenheim

Zurück zu Package Robot

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast