在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
///////消息广播只能将消息传递到接收消息的主程序中,MDIChild窗体不能接收到广播消息;///////// unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = 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消息,重点在于返回的值MyMessage end; /////////预先注册好Windows消息;第二种方法//////////////////// { initialization MyMessage:=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 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论