Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: So 31.07.11 04:34
Hey,
ich hab mal wieder ne ziemlich einfache Frage (denk ich zumindest). Und zwar hol ich mir über OpenProcess 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jaenicke
      
Beiträge: 19322
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 31.07.11 08:22
Dafür gibt es doch genug fertige Lösungen, da musst du nicht das Rad neu erfinden.
www.delphi-library.d...iewtopic.php?t=20679
www.delphidabbler.co...rticle=13&part=3
www.delphipraxis.net...orm1-uebergeben.html
Die Nachrichten abfangen geht mit TApplicationEvents und dessen Ereignis OnMessage. Das benutzt ein Multicast-Event, so dass auch mehrere davon funktionieren.
Für diesen Beitrag haben gedankt: Bergmann89
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 31.07.11 13:43
Bergmann89 hat folgendes geschrieben : | Hey,
ich hab mal wieder ne ziemlich einfache Frage (denk ich zumindest). Und zwar hol ich mir über OpenProcess ein Handle zu einem offenen Prozess. |
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?
Zuletzt bearbeitet von Delphi-Laie am So 31.07.11 17:01, insgesamt 1-mal bearbeitet
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 31.07.11 14:22
Hinzu kommt: Wie schickt man Nachrichten an ein Prozess Handle?
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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
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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|