我在程序a中写:
procedure MyWndProc(var Msg: TMessage);procedure TForm1.MyWndProc(var Msg: TMessage);
begin
  if (msg.Msg=WM_USER + 101) then    
 begin
        showmessage('user101');
  end
  else
  begin
    inherited WndProc(msg);
    //oldproc(msg);
  end;end;WindowProc:=MyWndProc;当点按钮发送:
SendMessage(self.Handle ,WM_USER + 101,101,0);
那肯定没问题,但SendMessage(HWND_BROADCAST,WM_USER + 101,101,0);是不行的,因为WindowProc:=MyWndProc;是本窗口的,我想HWND_BROADCAST时,也能接收到,WindowProc:=MyWndProc要改为什么??
其实我的目的是程序a发送消息SendMessage(HWND_BROADCAST,WM_USER + 101,101,0);独立的另一程序b来接收消息的,所以我用HWND_BROADCAST来在a程序中做测试,用application.OnMessage=我没试验成功呀,onmessage好像对键盘值到是起作用的。请高手帮忙。

解决方案 »

  1.   

    不明白你的意思,是不是要a给b发消息,让b接受,
    那就把上面那段代码写到b中就行了啊~
      

  2.   

    简单点就是我a程序向window发出一个消息wm_user+101,
    b程序捕获来自window的消息wm_user+101
    “那就把上面那段代码写到b中就行了啊~”不行的。
      

  3.   

    需要使用RegisterWindowMessage来注册那个消息, 给你一个例子:type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        iMsg    : Integer;
        OldProc : TWndMethod;
        procedure MyMessage(var Msg: TMessage);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      OldProc := Self.WindowProc;
      Self.WindowProc := MyMessage;
      iMsg := RegisterWindowMessage('MyMessage');
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Self.WindowProc := OldProc;
    end;procedure TForm1.MyMessage(var Msg: TMessage);
    begin
      if msg.Msg = iMsg then
        Memo1.Lines.Add('!!!!')
      else
        OldProc(Msg);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      SendMessage (HWND_BROADCAST, iMsg, 0, 0);
    end;end.
      

  4.   

    WM_USER   +   101
    是你自已定义的消息发到另外的程序当然不行~~
    只有先把这个消息注册以后
    程序B才能识别var msg:integer;msg:=RegisterWindowMessage(WM_USER   +   101);