Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eine Message senden an Programm ohne Fenster. Wie? (https://www.delphipraxis.net/115456-eine-message-senden-programm-ohne-fenster-wie.html)

romber 12. Jun 2008 12:26


Eine Message senden an Programm ohne Fenster. Wie?
 
Ich habe in meinem Programm kein einziges Fenster, nur ein TrayIcon und ein PopupMenu dafür. Die ganze Code steht bei mir in der Projektdatei und alles was ich vor hatte funktioniert auch sehr gut. Nun möchte ich von einem anderen Programm eine Message an dieses Program senden. Ein String. Ich habe das früher schon gemacht, indem ich mit FindWindowEx ein bestimmtes Fenster gefunden habe und mit SendMessage ein String an dieses Fenster gesendet habe. Hier aber habe ich keine Fenster?

Wie mache ich das?

himitsu 12. Jun 2008 12:38

Re: Eine Message senden an Programm ohne Fenster. Wie?
 
erzeug dir einfach ein Hier im Forum suchenMessageOnlyWindow

oder einfach 'nen unsichtbares Fenster

oder verwende andere IPCs

nicodex 12. Jun 2008 12:50

Re: Eine Message senden an Programm ohne Fenster. Wie?
 
Threads können eine eigene Message-Queue haben. Siehe PostThreadMessage. Allerdings wird das in dem Moment aufwändig, an dem du andere Daten LParam und WParam übertragen willst (was bei einem String der Fall wäre). Dann müsstest du die Daten ohnehin über IPC austauschen...

romber 12. Jun 2008 13:18

Re: Eine Message senden an Programm ohne Fenster. Wie?
 
Zitat:

Zitat von himitsu
erzeug dir einfach ein Hier im Forum suchenMessageOnlyWindow
...

Ich habe leider nicht verstanden, wie ich so ein MessageOnlyWindow erzeuge und dazu bringe, Messages zu empfangen. Den Beispiel von himitsuhier habe ich gesehen und scheinbar wird das Fenster auch erzeugt, nur ich habe keine Ahnung wie ich das neu erzeugtes Fenster dazu bringe, Messages zu empfangen. Wie mache ich das?

himitsu 12. Jun 2008 14:07

Re: Eine Message senden an Programm ohne Fenster. Wie?
 
du mußt dir eine Nachrichtenschleife aufbauen und wenn es sein muß, dann kannst du per SetWindowLong auch noch eine NachrichtenProzedur beim Fenster angeben.

romber 12. Jun 2008 14:15

Re: Eine Message senden an Programm ohne Fenster. Wie?
 
Zitat:

Zitat von himitsu
du mußt dir eine Nachrichtenschleife aufbauen und wenn es sein muß, dann kannst du per SetWindowLong auch noch eine NachrichtenProzedur beim Fenster angeben.

Klingt ganz einfach, doch ich habe so etwas noch nie gemacht. Gibt es irgendwo ein Beispiel für so etwas?

himitsu 12. Jun 2008 14:27

Re: Eine Message senden an Programm ohne Fenster. Wie?
 
per SetWindowLong deine Prozedur beim Fenster angegeben hast, dann wird diese nun aufgerufen.

Delphi-Quellcode:
Var Msg: TMsg;
  isUnicode: Boolean;

Begin
  While PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) do Begin
    isUnicode := (Msg.hWnd <> 0) and IsWindowUnicode(Msg.hWnd);
    If isUnicode Then Begin
              If not PeekMessageW(Msg, 0, 0, 0, PM_REMOVE) Then Continue;
    End Else If not PeekMessageA(Msg, 0, 0, 0, PM_REMOVE) Then Continue;
    TranslateMessage(Msg);
    If isUnicode Then DispatchMessageW(Msg) Else DispatchMessageA(Msg);
  End;
End;
und die Kurzfassungen:
Delphi-Quellcode:
Var Msg: TMsg;

Begin
  While PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do Begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  End;
End;

// oder

Var Msg: TMsg;

Begin
  While GetMessage(Msg, 0, 0, 0) do Begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  End;
End;

alternativ könnte man auch innerhalb dieser Schleife seine Messages abfragen (dabei besse noch das Fenster prüfen ... muß ja nicht alles in dieser Schleife für/von deinem Fesnter sein)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz