Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 22:18

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Result einer Windows-Nachricht
BeitragVerfasst: Fr Jul 07, 2006 18:35 
Offline
DGL Member
Benutzeravatar

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:
Code:
  1. procedure TRemoteCtlSlave.FindMaster;
  2. begin
  3.   FMaster:= SendMessage(HWND_BROADCAST,FMsgID,MSG_WHEREAREYOU,0);
  4. end;


Und der Empfänger:
Code:
  1.  
  2. ....
  3.   Application.HookMainWindow(hook);
  4. ....
  5. function TRemoteCtlMaster.hook(var msg: TMessage): boolean;
  6. var
  7.   s: string;
  8. begin
  9.   result:=FALSE;
  10.   if msg.msg <> FmsgID then exit;
  11.   result:=TRUE;
  12.   case msg.wparam of
  13.     MSG_WHEREAREYOU: msg.Result:= Application.Handle;
  14.     ..........
  15.   end;
  16. end;


Was muss ich machen, um da ran zu kommen? Bei EM_GETCARETPOS geht es ja auch:
Code:
  1. caretpos := SendMessage (hwnd, EM_GETCARETPOS, 0, 0);


Hoffe mal, hier kann mir einer Helfen, einige WinAPI-Programmierer soll's ja hier geben... ;)

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 07, 2006 23:15 
Offline
DGL Member
Benutzeravatar

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...

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 08, 2006 07:32 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 08, 2006 11:02 
Offline
DGL Member
Benutzeravatar

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.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]