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
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).
wenn dass „andere“ Programm ein Programm von dir ist (was ich nicht annehme, dann könntest du eine Schnittstelle dazu bauen. (relativ einfach machbar).
wenn du den Source Code vom anderen Programm hast, dann ist es schon etwas schwieriger. Du musst erst die Stelle im fremden Programm finden.
wenn es sich um eine Web-Seite im Browser handelt welche periodisch upgedated wird, könnte es auch einfach sein.
wenn nichts davon zutrifft, dann schau mal genau, ob das „andere“ Programm nicht irgend eine Schnittstelle bietet, die man nutzen könnte.
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.
anderes Programm wählen, welches ebenfalls entsprechende Daten bereitstellt oder noch besser eine librarie, welche das kann was du benötigst und darauf aufsetzen.
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.
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.
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.