Entwickler-Ecke
Windows API - Message an Prozess abfangen
Bergmann89 - So 31.07.11 04:34
Titel: Message an Prozess abfangen
Hey,
ich hab mal wieder ne ziemlich einfache Frage (denk ich zumindest). Und zwar hol ich mir über
OpenProcess [
http://msdn.microsoft.com/en-us/library/ms684320%28v=vs.85%29.aspx] ein Handle zu einem offenen Prozess. An den kann ich ja jetzt beliebige Messages senden. Aber wie fang ich die dann in dem anderen Programm ab? Ich weiß nur wie man Nachrichten eines Fensters abfängt. Zuerst hab ich gedacht, das die Nachricht ja in der MainForm ankommen müsste, aber da tut sich nix. Wäre toll, wenn mir da mal jmd n Stichwort geben könnte, meine Suchen bei google sind bis jetzt erfolglos :(
MfG Bergmann.
Delete - So 31.07.11 05:07
In der VCL findet die Nachrichtenverarbeitung nicht im Hauptformular statt, sondern im unsichtbaren Application Fenster. aber wie schickst du mittels OpenProcess Nachrichten an einen Prozess? Fensternachrichten werden an Fensterverschickt und nicht an Prozesse. Willst du auf eine eigne Nachricht an ein fremdes Fenster reagieren, musst du wohl eine DLL injizieren, die WndProc "umbiegen", auf deine Nachricht reagieren und für alle anderen Nachrichten die original WndProc aufrufen.
Bergmann89 - So 31.07.11 05:53
Hey,
ich fang lieber nochma ganz von vorn an, kann sein das ich auf dem Holzweg bin. Also:
Ich hab ein Programm was auch paar Datein auf der Festplatte ablegt. Der User soll die Datein per Doppelklick öffnen können. Da wird aber immer eine weitere Instanz des Programms gestartet. Ich will es jetzt so haben, dass die Datei in dem bereits geöffnetem Programm geladen wird. Deshalb wollte ich vorm Progammstart prüfen ob das Programm schon gestartet ist und dann eine entsprechende Message schicken, dass das bereits offene Programm die Datei läd. Da die MainForm des Programms aber nicht immer geöffnet ist, komm ich mit FindWindow nicht (immer) an das Handle und deshalb wollt ich die Message an den Prozess bzw. die Application senden.
Ich weiß aber weder, wie man die WndProc des unsichtbaren Application Fensters umbiegt, noch wie man die Messages die and die Application geschickt wurden abfängt.
MfG Bergmann.
Bergmann89 - So 31.07.11 09:42
Hey,
sowas hab ich gesucht. Ich hab nur nich gewusst nach was ich suchen soll^^ Danke!
€: hab das ganze jetzt mal implementiert. Funktioniert auch ganz gut, ABER: die Message wird nur einmal gesendet und kommt 9 mal in der ersten Programminstanz an. Ich hab's genauso gemacht, wie
hier [
http://www.delphi-library.de/viewtopic.php?t=19370] erklärt wird. Kann sich das jmd erklären?
€2: liegt das daran, das ich beim Senden der Message ein Broadcast benutzte und jede geöffnete Form darauf reagiert?
MfG Bergmann.
Delphi-Laie - So 31.07.11 13:43
Was ist denn ein "offener Prozess"? Die Funktion "Openprocess" öffnet doch einen Zugang zu einem Prozeß über ein sog. Handle. Wenn es "offene" Prozesse gibt, dann müßte es ja genaugenommen auch geschlossene geben!
Gibt es mithin mal wieder (mir unbekannte) geheimnisvolle Tiefen der Programmierung?
Delete - So 31.07.11 14:22
Hinzu kommt: Wie schickt man Nachrichten an ein Prozess Handle?
Bergmann89 - So 31.07.11 16:32
Hey,
ja ich weiß das war teilweiße ziemlicher Mist was ich oben geschrieben hab, aber es war schon spät :P
Das Problem das die Message 9 mal bearbeitet wird hab ich auch gelöst, indem ich vorher noch überprüfe, ob die Message direkt an die Anwendung (bzw das unsichtbare Application Fenster ;) ) oder an ein Fenster geschickt wurde:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TMainForm.ApplicationEventsMessage(var Msg: tagMSG; var Handled: Boolean); begin if (Msg.message = ActivationMessage) and (Msg.hwnd = Application.Handle) then begin end; end; |
MfG Bergmann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!