| Autor |
Nachricht |
Bergmann89
      
Beiträge: 1572
Erhaltene Danke: 50
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^^
|
| |
|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
Luckie
       
Beiträge: 11803
Erhaltene Danke: 146
WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
|
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.
_________________ Gruß Michael
|
| |
|
|
Bergmann89 
      
Beiträge: 1572
Erhaltene Danke: 50
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: 15841
Erhaltene Danke: 741
XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, 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: 1572
Erhaltene Danke: 50
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: 503
Erhaltene Danke: 30
Delphi 2-4
|
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
       
Beiträge: 11803
Erhaltene Danke: 146
WindowsXP Professional SP2
BDS2006, VS C++ Express, Eclipse (Java), Flex (Flash, AS)
|
Verfasst: So 31.07.11 14:22
Hinzu kommt: Wie schickt man Nachrichten an ein Prozess Handle?
_________________ Gruß Michael
|
| |
|
|
Bergmann89 
      
Beiträge: 1572
Erhaltene Danke: 50
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:
MfG Bergmann.
_________________ Ich weiß nicht viel lern aber dafür umso schneller^^
|
| |
|
|
|