Announcement

Collapse
No announcement yet.

postMessage/sendMessage kommt nicht an

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • postMessage/sendMessage kommt nicht an

    Hallo<br>
    Ich möchte aus einer Anwendung heraus einem Formular einer anderen Anwendung eine Message schicken. Dazu habe ich folgendes gemacht:<br>
    <pre>
    hTargetWND:=FindWindow(nil,'Hauptformular');
    if hTargetWND<>0 then
    begin
    sendMessage(hTargetWND,PM_ActivateApp,0,0);
    postMessage(hTargetWND,PM_ActivateApp,0,0);
    setForeGroundWindow(hTargetWND);
    end
    else ....
    </pre><br>
    Das ist der Code aus der Anwendung. Das Fensterhandle ist korrekt, da es korrekt in den Vordergrund geholt wird. Aber weder sendMessage noch postMessage kommen an (PM_ActivateApp ist als Konstante deklariert als WM_App+111).<br>
    Im Hauptformular, das die Message empfangen soll, habe ich folgendes getan:<br>
    <pre>
    interface
    type TMainForm=class(TForm)
    ...
    private
    procedure PMActivateApp(var Msg:TMessage); message PM_ActivateAPP;
    ...
    end;

    implementation

    procedure TMainForm.PMActivateAPP(var MSG:TMessage);
    begin
    showmessage('Windows-Message empfangen...');
    end;
    </pre>

    Da die Meldung 'Windows-Message empfangen' nicht angezeigt wird, kommt die Meldung anscheinend nicht an. Weiß jemand, warum?<br>
    Danke<br>
    Patrick

  • #2
    Hallo,

    das für den Anwender sichtbare Formular des Programms ist für Windows nicht das Hauptfenster der Anwendung! Statt dessen übernimmt das "unsichtbare" Fenster von <b>TApplication</b> diese Aufgabe, damit trifft jede Windows-Botschaft auch zuerst dort ein. Die Botschaft kann somit über das TApplication-Ereignis <b>OnMessage</B> ausgewertet werden.

    P.S: Mit dem Delphi-Tool <b>WinSight32</b> kann man sich davon überzeugen, welche Fenster alles zur Anwendung gehören

    Comment


    • #3
      die Gemeinheit ist, das eine Delphi-Applikation ein unsichtbares Hauptfenster hat das nicht mit dem Fenster der MainForm identisch ist. SendMessage sendet direkt an das angesprochene Fenster.<br>
      Versuche es mal mit Application.OnMessage.<br>
      Es empfiehlt sich auch ein FindWindow('TMainForm', nil), da es zuverlaessiger arbeitet. Der Klassenname der Hauptform wird als Windows-Fensterklassenname benutzt. Ein besserer Name als 'TMainForm' empfiehlt sich auch

      Comment


      • #4
        hallo,

        wenn, warum dann eigentlich nicht so:
        FindWindow('TMainForm', 'Hauptformular');
        auf diese weise kann es auch vorkommen dass mehrere TMainForm s laufen, sofern diese nicht alle auch noch 'hauptformular' im caption haben...

        mfg
        ak

        Comment

        Working...
        X