C++: Wie kann ich Daten aus anderem Fenster lesen

Hallo

Also ich hätte mal eine Frage. Und zwar bin ich gerade dabei ein Programm zu schreiben, dass Daten(Strings) aus einem anderen Programm einlesen soll. Und zwar gibt es bei dem Programm, das eingelesen werden soll ein Textfeld. Ich möchte gerne die Daten aus dem Feld in mein Programm importieren.
Nun das Problem, die Daten aus Programm 1 ändern sich etwa alle 10-20 Sekunden und ich habe keine Idee wie ich an die Daten kommen kann. Aber das sie ja auf dem Bildschirm angezeigt werden, müsste ich sie doch normal auch irgendwie an mein Programm umleiten können.
Habt ihr eine Idee, wie ich mein Vorhaben realisieren kann und eventuell gleich ein paar Tipps, Tutorials oder eventuell Buchempfehlungen für mich?
Oder ist mein Vorhaben einfach nicht möglich?
Liebe Grüße
Daniel

Hallo Daniel !

Vorweg: Das ist keine triviale Aufgabe auch wenn
es auf den ersten Blick so aussehen mag (man sieht es
ja schließlich auf dem Schirm).

  1. wenn dass „andere“ Programm ein Programm von dir ist (was ich nicht annehme, dann könntest du eine Schnittstelle dazu bauen. (relativ einfach machbar).

  2. wenn du den Source Code vom anderen Programm hast, dann ist es schon etwas schwieriger. Du musst erst die Stelle im fremden Programm finden.

  3. wenn es sich um eine Web-Seite im Browser handelt welche periodisch upgedated wird, könnte es auch einfach sein.

  4. wenn nichts davon zutrifft, dann schau mal genau, ob das „andere“ Programm nicht irgend eine Schnittstelle bietet, die man nutzen könnte.

  5. wenn das alles nicht zutrifft, dann wird es echt kompliziert:

  • periodisch screenshot ziehen (geht noch einfach, je nach library, welche du verwendest. Jedenfalls mit Qt ist dies leicht möglich).
  • OCR (Optical Character Recognition) zum „interpretieren“ des Bild-Ausschnittes. Libraries für OCR verfügbar, aber grundsätzlich problematisch und fehleranfällig.
    Dies macht vermutlich nicht wirklich jemand.
  1. anderes Programm wählen, welches ebenfalls entsprechende Daten bereitstellt oder noch besser eine librarie, welche das kann was du benötigst und darauf aufsetzen.

lg,
Bernd

Hallo,

das kommt darauf an, wie das die Daten bereitstellende Programm arbeitet: Ist es eine GUI-Anwendung, d.h. die Daten werden ausschließlich in einem zum Programm gehörenden Fenster ausgegeben, dann hast Du Pech.

Ist es eine Konsolenanwendung, die ihre Daten über den Standardausgabestream (stdout bei C++) ausgibt, dann kannst Du diese mit einer 2. Konslolenanwendung mit dem Standardeingabestream (stdin) und unter verwendung von Pipes (unter Unix z.B. schreibt man auf der Konsole „Programm1 | Programm2“) ohne großen Aufwand machen.

Möglich wäre auch, noch, wenn sich die Daten in eine Datei ausgeben lassen. Dann muß man diese nur in einer 2. Anwendung zum lesen öffnen und in einer Endlosschleife einlesen.

Kannst Du das das datenerzeugende Programm abändern, dann bietet sich auch ein Message Passing System an, z.B. DBus (ziehe dazu http://en.wikipedia.org/wiki/Message_passing oder http://doc.qt.nokia.com/4.6/qtdbus.html) an.

Hallo Daniel,
wenn du der Autor beider Programme bist, ist „Inter Prozess Kommunikation“ (oder inter process communication - IPC) dein Stichwort. Dafür gibt es verschiedene Bibliotheken (auch freie), mit denen du Daten zwischen verschiedenen Programmen austauschen kannst. Oder du schreibst die strings nicht nur in das Textfeld, sondern zusätzlich in eine Datei an einem festen Speicherort und liest diese Datei mit dem anderen Programm regelmäßig aus. Damit ist allerdings nicht garantiert, dass du jede Änderung im zweiten Programm mitkriegst.
Wenn du auf das Programm mit dem Textfeld keinen Einfluss hast, wird es schwieriger, bzw. ich weiß nicht, ob das überhaupt möglich ist.

Grüße
markus

Hallo

Hallo

Also ich hätte mal eine Frage. Und zwar bin ich gerade dabei
ein Programm zu schreiben, dass Daten(Strings) aus einem
anderen Programm einlesen soll.

Programme besitzen immer diskrete Speicherbereich, auf die nur sie Zugriff haben - das ist gut so. Du solltest einen Weg finden, das Programm zur Weitergabe seiner Infos zu bewegen (Datei, Pipe etc.) und nicht auf dem Bildschirm (Grafikdaten).

Und zwar gibt es bei dem
Programm, das eingelesen werden soll ein Textfeld.

Programm einlesen -> geht nicht

Wie du siehst hab ich auh keine gute Idee dazu.

Gruß oldy