malabarista hat geschrieben:OK, dankeschön.
Dann hat sich das erledigt und "receiver" als normales Windows-Programm geschrieben.
Das ist kein guter weg. Das interagieren mit konsolen anwendungen ist viel einfacher als mit Formanwendungen, und gleichzeitig crossplattform kompatibel, da die interaktion unter Posix und Windows fast gleich ist.
Wenn dein Programm nur von einem anderen programm gesteuert werden soll schreibst du einfach in den In/Out stream. Dafür gibt es die TProcess und TAsyncProcess klasse, die implementieren das. Wenn viele programme mit der Konsolen anwendung interagieren sollen pipest du einfach eine named fifo in den stdin und schreibst dann über diese Fifo. Du musst du eventuell noch die EOF's aus dem fifo filtern (z.b. einfach durch ein tail -f pipen)
Einfaches Unix beispiel:
Code: Alles auswählen
mkfifo MyApp.fifo
tail -n +1 -f MyApp.fifo | MyApp --args
(bash code, lässt sich auch direkt in laz umsetzen, ist aber komplizierzter)
Von jetzt an können beliebige programme sachen in die MyApp.fifo datei schreiben, und egal welches programm darein schreibt, für MyApp verhält es sich genauso als würden diese daten direkt in die Kommandozeile geschrieben werden.
Funktioniert Unter Unix, für Windows gibt es auch bash und coreutils, müsste aber auch alles direkt durch die WinAPI gehen (wenn du die software verteilen willst ist es nicht die beste idee Bash unter Windows vorrauszusetzen). Ansonsten sollte die powershell (und eventuell auch cmd) das auch können, allerdings kenn ich da die programmnamen nicht auswendig
Das ist einfacher, schöner und wahrscheinlich auch effizienter als FindWindow und konsorten
PS: Ansonsten kannst du mit fremden programmen auch über Shared Memory (kompliziert) oder named pipes (die nicht an stdin/stdout gepiped sind) kommunizieren. Außerdem bin ich mir da nicht sicher das Konsolen anwendungen keine Message queue haben, denn z.B. klicks werden als messages gequeued (da keine ansi escape squences unterstützt wurden bis vor kurzem). Und windows bietet auch sonst keine queuing IPC möglichkeiten, daher denke ich das die message queue von jedem prozess verwendet werden kann.