![]() |
HWND_BROADCAST kommt nicht an?
Hallo, folgende einfache Quelltexte:
Defs:
Delphi-Quellcode:
const
// app will send this as broadcast when going online, with wparam = handle WM_OnlineStatement = WM_USER + 1; // app will answer to this with above broadcast WM_OnlineQuestion = WM_USER + 2; //EDIT: war vorher 1 :roll: Prog1
Delphi-Quellcode:
Prog2
procedure OnWMOnlineQuestion(var Msg: TMsg); message WM_OnlineQuestion;
procedure TFLogMan.OnWMOnlineQuestion(var Msg: TMsg); begin Beep; PostMessage(HWND_BROADCAST,WM_OnlineStatement,Handle,0); end;
Delphi-Quellcode:
Hoffe das ist ausreichend als Basis.
procedure TForm2.BSearchLogAppClick(Sender: TObject);
begin SendMessage(HWND_BROADCAST,WM_OnlineQuestion,Handle,0); Beep; end; procedure TForm2.OnWMOnlineStatement(var Msg: TMsg); begin LogHandle := Msg.wParam; MLog.Lines.Add('Log App answered: ' + IntToStr(LogHandle)); end; Folgendes problem: Die Messages kommen nicht an, weder WM_OnlineStatement noch WM_OnlineQuestion. :pale: Mach ich was falsch? EDIT: Uppsala... die messagedef wird sofort umgebogen... please stand by... EDIT2: hat nix gebracht |
Re: HWND_BROADCAST kommt nicht an?
Hallo,
das liegt daran, das SendMessage mit HWND_BROADCAST die Message nur an alle Top-Level Fenster sendet. |
Re: HWND_BROADCAST kommt nicht an?
Und ein Delphi-Fenster ist kein toplevel-fenster?! Bzw. Delphi reicht das nicht durch?
|
Re: HWND_BROADCAST kommt nicht an?
Zitat:
|
Re: HWND_BROADCAST kommt nicht an?
Zitat:
Na weil ich die Message gefälligst haben will! Und zwar auf der Stelle! OK, wie häng ich mich in die top-level-botsdchaftsschleife ein? Ich muss doch wohl keinen hook setzen?! |
Re: HWND_BROADCAST kommt nicht an?
Ich glaube, eine Behandlungsmethode für Application.OnMessage reicht ;)
Juhuu ... mein 1784. Beitrag .... häh ? :mrgreen: |
Re: HWND_BROADCAST kommt nicht an?
ok... dann kommt hier die nächste deprimierung:
Delphi-Quellcode:
:cry:
procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if Msg.hwnd = HWND_BROADCAST then MLog.Lines.Add('!'); if Msg.message = WM_OnlineStatement then MLog.Lines.Add('!!'); end; EDIT: Im Logmemo tut sich natürlich nichts ;) |
Re: HWND_BROADCAST kommt nicht an?
Also bei mir gehts ...
Delphi-Quellcode:
Die Message komt allerdings zweimal an ... einmal bei der Application und einmal ... bin ich grad am gucken ;)
var
Form1: TForm1; msgid: Cardinal; implementation {$R *.dfm} procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin if Msg.message = msgid then begin Memo1.Lines.Add('Olé ! ' + IntToStr(Msg.hwnd)); end; end; procedure TForm1.Button1Click(Sender: TObject); begin PostMessage(HWND_BROADCAST, msgid, 0, 0); end; procedure TForm1.FormCreate(Sender: TObject); begin msgid := RegisterWindowMessage('MyCoolTestProg'); Memo1.Text := IntToStr(msgid); Memo1.Lines.Add(inttostr(Application.Handle)); Memo1.Lines.Add(inttostr(Form1.Handle)); end; end. |
Re: HWND_BROADCAST kommt nicht an?
Zitat:
Was du brauchst ist RegisterWindowMessage. Das Beispiel dazu hat jfheins ja schon geschrieben. Meine Erfahrung dabei zeigt aber, daß es leider Programme gibt, die auch auf eine solche Botschaft antworten, auch wenn sie das nicht tun dürften. Insofern sollte man wenn man eine zuverlässige Antwort braucht, auch diese Message nicht per Broadcast schicken, sondern nur selektiv (z.B. nur an Fenster mit einem bestimmten Titel). |
Re: HWND_BROADCAST kommt nicht an?
OK, danke. werde das so machen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz