全局 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);