Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
Hallo
Ich habe zwei Programme, von denen das eine das andere "suchen" muss. Dazu benutze ich eine eigene Nachricht, die im Msg.Result Feld das Handle der 2. App zurückgibt/geben sollte. Leider komme ich an diesen Wert nicht ran, Sendmessage liefert immer 1, selbst wenn die andere App nicht läuft.
Hier der Code des Senders:
Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
OK, ich glaub ich habs doch selbst. SendMessage lieferet be Verwendung von HWND_BROADCAST immer 1. Wird ein genaues Fensterhandle benutzt, geht alles prima.
Ich hab das Problem jetzt so gelöst, dass die Master-Anwendung eine Nachricht zurückschickt mit dem Handle im LParam. Nicht ganz so elegant, da ich jetzt im Slave auf die Botschaftsbehandlung der Anwendung warten muss ("wann ist die Antowort da"), aber es geht...
es gibt unter windows die möglichkeit, alle fenster samt handle abzufragen. da musst du dir dann nur noch die fenster von deiner app heraussuchen. wie das geht kann ich dir nicht mehr verraten - lang nicht mehr gemacht. evtl. sind auch techniken wie named pipes oder mutexes mit namen interessant. (oder alles was sonst unter inter-prozess kommunikation läuft)
Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
Danke für die Antwort, aber ich kann in diesem besonderen Fall kein Datei-I/O auf Pipes machen. Und alle Fenster abfragen geht auch nicht, weil das Hauptfenster keine eindeutige Kennzeichnung hat... soll ja auch wiederverwendbar sein. Teilweise brauch ich mehrere Kommunikationskanäle, was die Sache noch komplizierter macht.
Ich benutze diese Klassen um einem Programm eine Plugin-Schnittstelle nachzurüsten, das für eigentlich nicht programmiert ist. Ein komplett-Rewrite wäre auch schlecht zu machen, zu komplex.
Jetzt läuft das so:
(Die Msg_***-Konstanten werden im WParam übertragen)
- Message auf Namen registrieren, bei Master und Slave gleicher string->gleiche Msg-ID
- Slave sucht Master (Msg_WherAreYou und eine Msg_HereIam zurück)
- Slave schickt string über WM_Copydata, im dwData wird die Msg-ID eingetragen, um die CopyData zu erkennen.
- Master löst Ereignis aus, Anwendung reagiert:parst string, führt Kommando aus.
Falls jemand am Code interesse hat (ist eigentlich nix besonderes), Bescheid sagen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.