標籤:
///////訊息廣播只能將訊息傳遞到接收訊息的主程式中,MDIChild表單不能接收到廣播訊息;/////////
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;typeTForm1 = class(TForm) Button1: TButton;procedure Button1Click(Sender: TObject);procedure FormCreate(Sender: TObject);public procedure WndProc(var message:TMessage);override;end;var Form1: TForm1; MyMessage: DWORD;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WndProc(var message: TMessage); // 可處理自訂訊息begin if message.Msg=MyMessage then // 第3步:重載Windows訊息處理過程,處理接收到的MyMessage訊息; ShowMessage(FloatToStr(Handle)+ ‘MyMessage‘); // 每次程式關閉後再啟動,控制代碼值不一樣。但不關閉就是同一個值 inherited WndProc(Message); // 其實沒什麼用,但是屏蔽後出錯end;procedure TForm1.Button1Click(Sender: TObject);begin SendMessage(HWND_BROADCAST,MyMessage,0,0); //第2步:發送MyMessage訊息,相當於廣播;而且兩個程式都執行了的話,一個處理完另一個才能開始處理。可以試試PostMessage的區別end;/////////預先註冊好Windows訊息;第一種方法////////////////////procedure TForm1.FormCreate(Sender: TObject);begin //同一字串,如‘MyMessageMe‘ 在不同的程式中調用RegisterWindowMessage註冊訊息時,返回的MyMessage結果是一樣的。這樣為在不同程式之間廣播訊息提供了可能。即不同程式註冊訊息時,必須註冊相同的注符串。 MyMessage:=RegisterWindowMessage(‘MyMessageMe‘); //第1步:註冊Windows訊息,重點在於返回的值MyMessageend;/////////預先註冊好Windows訊息;第二種方法////////////////////{ initializationMyMessage:=RegisterWindowMessage(‘MyMessageMe‘);}//BroadcastSystemMessage,可以在進程之間廣播訊息;procedure TForm1.SendSMSMessage;var SMSMessage:Cardinal; recipt:Cardinal;begin SMSMessage:=RegisterWindowMessage(‘SendSMSMessage‘); recipt:=BSM_ALLDESKTOPS; //所以傳統型程式都可以接收 BroadcastSystemMessage(BSF_POSTMESSAGE,@recipt,SMSMessage,0,0);end;end.
參考:http://www.cnblogs.com/key-ok/p/3417727.html
Delphi訊息的廣播方式(先RegisterWindowMessage,後SendMessage HWND_BROADCAST,最後改寫接收視窗的WndProc)