我在程序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好像对键盘值到是起作用的。请高手帮忙。
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好像对键盘值到是起作用的。请高手帮忙。
那就把上面那段代码写到b中就行了啊~
b程序捕获来自window的消息wm_user+101
“那就把上面那段代码写到b中就行了啊~”不行的。
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.
是你自已定义的消息发到另外的程序当然不行~~
只有先把这个消息注册以后
程序B才能识别var msg:integer;msg:=RegisterWindowMessage(WM_USER + 101);