Forum: PC-Programmierung Aus belibiger Programmoberfläche Variablen auslesen - Silverfast AI Studio 8.8


von Markus H. (haniham) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo meine Lieben,

wir haben uns zum neuen Jahr einen Dia Magazinscanner mitsamt der 
Profisoftware Silverfast AiStudio 8.8 gekauft

Da wir sehr sehr viel zum Scannen haben und der Scanner in einem anderen 
Stockwerk steht, möchte ich gerne den Fortschritt auslesen, der 
Heimautomatisierung zur Verfügung stellen und auf einer getrennten 
Anzeige darstellen.

Ich hab mich damit (und auch mit der Idee Stillstandszeit zu sparen, 
durch ein Pipelining bei Scannen und Nachbearbeitung) im Herstellerforum 
der Software gemeldet und trotz meiner Investition von 360€ werden meine 
Anregungen wohl ignoriert bleiben - Beitrag siehe unten:

http://forum.silverfast.com/viewtopic.php?f=1&t=15606&p=44519#p44519

Ich würde daher gerne ohne Beteiligung des Herstellers die im Anhang 
markierten Variablen aus der Programmoberfläche auslesen.
Mit autoIt war es doch schon früher möglich Buttons in Programmen anhand 
ihrer id zu betätigen.

Gibt es etwas vergleichbares zum Auslesen von Strings / VAriablen aus 
Programmoberflächen?
Meine Google Suchen zu dem Thema verlaufen leider nur ins leere

Viele Grüße und schonmal mit bestem Dank für eure Ideen,
Markus

von LBO (Gast)


Lesenswert?

AutoIT

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Markus H. schrieb:
> Gibt es etwas vergleichbares zum Auslesen von Strings / VAriablen aus
> Programmoberflächen?

Das funktioniert nur, wenn die Programmoberfläche die windowseigenen 
Controls verwendet (die wie andere Windows-Elemente auch Fenster sind, 
denen man Nachrichten senden kann).

Bei vielen Programmen gibt es seit geraumer Zeit die Unsitte, auf die 
Windows-GUI-Elemente zu verzichten und die komplette Oberfläche als 
Bitmap zu rendern. Damit ist der Zugriff auf einzelne Bedienelemente 
effektiv abgeklemmt.

Ob Silverfast nun Windows-Controls verwendet oder was selbstgestricktes, 
kann mit einem Programm wie Spy++ herausgefunden werden. Das ist ein 
Tool, das zum Windows-SDK dazugehört, und das die Fensterhierarchie von 
Programmen anzeigt, sowie die Möglichkeit bietet, die an/von Fenster(n) 
gesendeten Nachrichten zu betrachten.

Geht man mit dem Fadenkreuz-Werkzeug von Spy++ über die 
Programmoberfläche von Silverfast, und werden dann verschiedene Elemente 
hervorgehoben, hat man Glück und das Programm verwendet 
Windows-Controls. Wird immer nur das komplette Programmfenster 
hervorgehoben, sieht's schlecht aus.

Dann hilft nur noch die Kombination aus "Screen-Grabbing" und einer 
(einfachen) Texterkennung.

von ;o) (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Das funktioniert nur, wenn die Programmoberfläche die windowseigenen
> Controls verwendet (die wie andere Windows-Elemente auch Fenster sind,
> denen man Nachrichten senden kann).
Auch bei den meißten anderen selbstgestrickten Bedienelementen kann man 
sich über den API-Befehl GetWindowText den Textinhalt holen.
Mann kann dann nur den Zeiger holen und in Windowseigene Klassen 
"stopfen"

Auf diese Weise habe ich ein mit Delphy erstelltes Programm mit einem 
unter C++ MFC um diverse Funktionen erweitert.
(Autoausfüllen, Automatisches Tasten drücken,...)

Rufus Τ. F. schrieb:
> Bei vielen Programmen gibt es seit geraumer Zeit die Unsitte, auf die
> Windows-GUI-Elemente zu verzichten und die komplette Oberfläche als
> Bitmap zu rendern. Damit ist der Zugriff auf einzelne Bedienelemente
> effektiv abgeklemmt.

Und diese Unsitte wird in den Programmierschulen als "Die Zukunft" 
angepriesen und das Programmieren mit Controls wird dort als Unsitte 
bezeichnet.

von ;o) (Gast)


Lesenswert?

>Mann kann dann nur den Zeiger holen und in Windowseigene Klassen
>"stopfen"

Das sollte "keinen Zeiger holen" heißen.

von Markus H. (haniham) Benutzerseite


Angehängte Dateien:

Lesenswert?

HA,

Es handelt sich anscheinend um eine QT5 Anwendung.

Habe dazu das Programm GammaRay gebunden, das es aber leider nur für 
UNIX und Linux gibt

von ;o) (Gast)


Lesenswert?

Fertige Programme wird es da nicht geben für das, was du brauchst.
Schau einmal ob du mit GetWindowText den Text der einzelnen Elemente 
ermitteln kannst.

Falls du in C / C++ programmieren kannst, Kannst du die einzelnen 
Elemente mit GetWindow ermitteln.

(Erst das Hauptfenster mit FindWindow suchen und dann sich mit 
GetWindow(GW_CHILD) und GetWindow(GW_HWNDNEXT) bis zum gewünschten 
Element durchhangeln)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.