• Delphi消息的广播方式(先RegisterWindowMessage,后SendMessage HWND_BROADCAST,最后改写接收窗口的WndProc)


    ///////消息广播只能将消息传递到接收消息的主程序中,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

  • 相关阅读:
    Spring session redis
    HttpClient Post Form data and get Response String
    compareTo & toString
    Zookeeper 脑裂
    Maven的HTTP代理设置
    Linux 硬件信息
    [Redis] RDB & AOF
    真实场景中WebRTC 用到的服务 STUN, TURN 和 signaling
    推荐一个VS2015 插件 Favorite Documents
    笔记 Activator.CreateInstance(Type)
  • 原文地址:https://www.cnblogs.com/findumars/p/4748371.html
Copyright © 2020-2023  润新知