首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

全局 SendMessage(HWND_BROADCAST ,WM_USER + 101,101,0),WindowProc接收不到,该如何写

2012-02-05 
全局 SendMessage(HWND_BROADCAST ,WM_USER + 101,101,0),WindowProc接收不到,该怎么写?我在程序a中写:pro

全局 SendMessage(HWND_BROADCAST ,WM_USER + 101,101,0),WindowProc接收不到,该怎么写?
我在程序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好像对键盘值到是起作用的。请高手帮忙。


[解决办法]
需要使用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.


[解决办法]
RegisterWindowMessage
[解决办法]
WM_USER + 101
是你自已定义的消息

发到另外的程序当然不行~~
只有先把这个消息注册以后
程序B才能识别

var 

msg:integer;

msg:=RegisterWindowMessage(WM_USER + 101);

热点排行