Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi "Application.OnMessage" wird 30x hintereinander ausgelöst??? (https://www.delphipraxis.net/26063-application-onmessage-wird-30x-hintereinander-ausgeloest.html)

Schucki 17. Jul 2004 13:32


"Application.OnMessage" wird 30x hintereinander au
 
Hi Leute,

ich habe folgendes Problem...
Ich möchte gerne 2 Anwendungen untereinander kommunizieren lassen.
Dies möchte ich mit Messages realisieren.

HCWM_SET wird mit RegisterWindowMessage erstellt.

Funktioniere tu alles ganz ausgezeichnet nur wird meine
Nachricht um die 30x bearbeitet... 1x würde mir reichen. :bounce1:
Ich bekomme also 30x meine Meldung "SET-OK" aufgepopt... :wall:
Ich dachte Handled auf True setzen sagt... "behandelt" !?

Wie macht man das nun richtig?

Code:
...
  protected
    procedure MyMessage(var Msg:TMsg; var Handled:Boolean);
...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage:=MyMessage;
end;

procedure TForm1.MyMessage(var Msg:TMsg; var Handled:Boolean);
begin
  if Msg.message=HCWM_SET then begin
    ShowMessage('SET-OK');  
    Handled:=True;
  end;
end;
Vielen Dank für die Hilfe... Schuki...

Bernhard Geyer 17. Jul 2004 14:39

Re: "Application.OnMessage" wird 30x hintereinande
 
Und wie sieht der Code der "Sender-"-Applikation aus?

Schucki 17. Jul 2004 15:01

Re: "Application.OnMessage" wird 30x hintereinande
 
Hi,

na so... :)
Sorry hatte ich vergessen... :cry:

Code:
  if intAction<>0 then PostMessage(HWND_BROADCAST,HCWM_SET,0,0);
Gruß Schuki...

p0w3r5tr34m3r 17. Jul 2004 15:19

Re: "Application.OnMessage" wird 30x hintereinande
 
hi,
wie wärs wenn du ne globale var machst die du dann auf true setzt wenn das einmal durchgelaufen ist ?

Delphi-Quellcode:
procedure TForm1.MyMessage(var Msg:TMsg; var Handled:Boolean);
begin
  if ( not handled ) and ( Msg.message=HCWM_SET ) then begin
    ShowMessage('SET-OK');  
    Handled:=True;
  end
  else
    exit;
end;
(nicht getestet, müsste aber klappen)

Powerstreamer

Bernhard Geyer 17. Jul 2004 15:34

Re: "Application.OnMessage" wird 30x hintereinande
 
HWND_BROADCAST zu verwenden ist m. E. schlecht. Da wird jetzt jedes Fenster benachrichtigt (und auch noch 'ne ganze Menge an unnützer Rechenzeit verbraten.
Sende doch nur an das Hauptformular oder an eine Art "Kommunikationsfenster" diese Nachricht.

Schucki 17. Jul 2004 15:46

Re: "Application.OnMessage" wird 30x hintereinande
 
Hi,

danke für die Hinweise...
Ok das mit dem Hilfsfebster ist so ne Sache...
Das hatte ich vorher gemacht... Problem war da aber das wenn die eigendliche Anwendung die
ferngesteuert werden sollte, minimiert war... kam die Nachricht nicht an. :cry:

Nun dachte ich es währe mit der "PostMessage" Variante besser...

Klar wenn es eine Lösung gibt das auch eine minimierte Anwendung oder besser das Fenster
auch Nachrichten empfangen kann wenn es minimiert ist ist die vorzuziehen !!!

Da stimme ich zu!

Problem ist dann wieder... wie bekomme ich das Handle der Anwendung...
FindWindow ist mir zu "ungenau" gibt es eine Möglichkeit die über den Pfad der EXE herauszubekommen?

MfG Schuki...

Bernhard Geyer 17. Jul 2004 16:23

Re: "Application.OnMessage" wird 30x hintereinande
 
Zitat:

Zitat von Schucki
Klar wenn es eine Lösung gibt das auch eine minimierte Anwendung oder besser das Fenster
auch Nachrichten empfangen kann wenn es minimiert ist ist die vorzuziehen !!!

Wuste ich nicht (bzw. hab nicht daran gedacht.

Zitat:

Zitat von Schucki
Problem ist dann wieder... wie bekomme ich das Handle der Anwendung...
FindWindow ist mir zu "ungenau" gibt es eine Möglichkeit die über den Pfad der EXE herauszubekommen?

Fällt mir im Moment leider keine ein. Es gäbe noch FindWindowEx, aber das wird auch nicht viel besser sein.

Alternative Kommunikationswege wäre z.B. über Named Pipes zu gehen. Oder falls der Registrierungsaufwand (Admin-Rechte) nicht stört, die Kommunikation über ein Automatisierungsschnittstelle laufen zu lassen.

Schucki 17. Jul 2004 16:58

Re: "Application.OnMessage" wird 30x hintereinande
 
Zitat:

Zitat von p0w3r5tr34m3r
hi,
wie wärs wenn du ne globale var machst die du dann auf true setzt wenn das einmal durchgelaufen ist ?

Delphi-Quellcode:
procedure TForm1.MyMessage(var Msg:TMsg; var Handled:Boolean);
begin
  if ( not handled ) and ( Msg.message=HCWM_SET ) then begin
    ShowMessage('SET-OK');  
    Handled:=True;
  end
  else
    exit;
end;
(nicht getestet, müsste aber klappen)

Powerstreamer

Denke das es so nicht gedacht ist...
Also wann will man die Variable auf false setzten?
Wieviel von dennen soll man denn verbauen wenn man mehr als eine Message verarbeiten will.

Es muss doch eine Lösung geben wie man die Behandlung der Nachricht richtig abschließt.
Wofür steht den die (...; var Handled:Boolean) ???

:wall: so langsam tut es weh... :stupid:

@Bernhard

Ja ich bin am verzweifeln... :gruebel: nutze hier im Übrigen WinXP...


MfG Schucki...

neolithos 17. Jul 2004 17:33

Re: "Application.OnMessage" wird 30x hintereinande
 
Wenn es schon unbedingt HWND_BROADCAST sein muss.

Dann fange die Nachricht lieber in einem Top-Level-Fenster ab (via WndProc).

Schucki 17. Jul 2004 23:51

Re: "Application.OnMessage" wird 30x hintereinande
 
Alles super... :thuimb:

nun mal eine Stufe tiefer angesetzt oder ?
Aber es soll mir recht sein... :bounce1:

Wichtig ist das es geht ohne 30x aufpopen... :lol:
Und es geht auch wenn es minimiert ist...

Ich danke Euch für die Infos!

Der Quelltext vom Empfänger...

Code:
procedure TForm1.WndProc(var Msg:TMessage);
var intAction,intAdd:integer;
begin
  if Msg.Msg=HCWM_GET then begin
    SchowMessage('SET-OK!');
  end;
  inherited WndProc(Msg);
end;
...und vom Sender...

Code:
SendMessage(HWND_BROADCAST,HCWM_GET,0,0);
Was noch interessant währe wie setzt man nun an wenn man nun nicht nur Zahlen übertragen möchte...
...sondern auch mal eine Zeichenkette ?

Gruß Schucki...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.
Seite 1 von 2  1 2      

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