Zwischen zwei Programmen kommunizieren?
-
Hi,
Wie kann ich eine Schnittstelle zwischen zwei Programm herstellen.
Das Hauptprogramm soll eine anderes Programm starten, dass beim Start Informatioen vom Hauptprogramm mitgeteilt bekommt und das Nebenprogramm soll über den Prozeß ebenfalls Information zurück an das Hauptprogramm geben.MfG Unwissender
-
Generell über Pipes oder sockets. (empfehlenswert)
Oder mit HIlfe von externen dateien. (nciht empfehlenswert)Es kann je nach Bedarf auch genügen, die Infomationen bei start des andern Programms als Parameter zu übergeben.
Mfg. Tolga
-
Leider kenn ich mich mit beiden so gut, wie garnicht aus. Codebeispiel kennst du nicht zufällig?
Und ich dachte Sockets sind zur Netzwerkprogrammierung gedacht?
MfG Unwissender
-
Der Standard-Mechanismus unter Windows ist (bisher noch) COM.
-
tja eigentlich sind sockets für netzwerkprogrammierung gedacht.
Du kannst aber ein Netzt über den Localhost zu deinem 2. Programm machen.Tutorials:
http://www.codersource.net/codersource_win32prog.html
http://www.hal-pc.org/~johnnie2/winsock.html
-
Mir schwebte das sowas vor wie den Zugriff über das HauptFenster Handle. Damit hätte ich ja dann alles Funktionen im Griff.
Das müsste doch mit FindWindow gehen oder ?
Oder sollte man so eine Lösung nicht nehmen?
@Helper
Über COM - mist, wieder was, dass ich noch nicht probiert habe
MfG Unwissender
-
wenn du 2 fenster hast und keine pipes und co verwenden willst, könntest du auch über benutzerdefinierte nachrichten gehen...
-
Wenn du weder Pipes (würde ich nehmen) noch sockets nehmen willst dann willst du kein problem lösen sondern liebst es den unkonventionellen / uneleganten und schweren Weg zu mehnem. Solche leute gibts. Ich habe verständnis für.
Jedem was er will.
-
wie geht das mit pipes?
-
Man könnte auch WM_COPYDATA benutzen.
MSDN schrieb:
An application sends the WM_COPYDATA message to pass data to another application.
-
Wenn beide Programme von Dir sind und beide immer gemeinsam laufen sollen und keine Erweiterungen geplant sind, dann kannst Du auch PostThreadMessage verwenden.
BOOL PostThreadMessage( DWORD idThread, // thread identifier UINT Msg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );Denn eigenen thread identifier hast Du ja nach dem Start des Hauptprogramms. Den des Nebenprogramms bekommst Du über die Struct PROCESS_INFORMATION (enthält den thread identifier) beim Aufruf des Nebenprogramms mit CreateProcess.
Alternativ kannst Du auch die Registry benutzen, um die Thread identifiers nach dem Aufruf zu speichen.@Tolga:
Wie elegant man was macht ist doch gleichgültig. Fehlerfrei und robust sollte es sein.Blackbird
-
Wie elegant man was macht ist doch gleichgültig. Fehlerfrei und robust sollte es sein.
unelegant ist meistens nicht robust.

-
unelegant ist meistens nicht robust.
Den Zusammenhang kann ich nicht erkennen.
Blackbird