用RegisterwindowMessage注冊唯一窗口标识 send方 var Form1: TForm1; UserMessage:UINT;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(FindWindow('TForm1','RegisterMessage Get Example'),UserMessage,0,0); //'RegisterMessage Get Example'接受窗口名字caption end;procedure TForm1.FormCreate(Sender: TObject); begin UserMessage:=RegisterwindowMessage('System Wide User Defined Message'); end;get方: var Form1: TForm1; UserMessage:UINT;implementation{$R *.dfm}procedure TForm1.DefaultHandler(var Msg); begin inherited DefaultHandler(Msg); if (TMessage(Msg).Msg=UserMessage) then begin button1.Click; end; end;procedure TForm1.FormCreate(Sender: TObject); begin UserMessage:=RegisterWindowMessage('System Wide User Defined Message'); end;procedure TForm1.Button1Click(Sender: TObject); begin showmessage('ok'); end;
send方
var
Form1: TForm1;
UserMessage:UINT;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(FindWindow('TForm1','RegisterMessage Get Example'),UserMessage,0,0);
//'RegisterMessage Get Example'接受窗口名字caption
end;procedure TForm1.FormCreate(Sender: TObject);
begin
UserMessage:=RegisterwindowMessage('System Wide User Defined Message');
end;get方:
var
Form1: TForm1;
UserMessage:UINT;implementation{$R *.dfm}procedure TForm1.DefaultHandler(var Msg);
begin
inherited DefaultHandler(Msg); if (TMessage(Msg).Msg=UserMessage) then
begin
button1.Click;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
UserMessage:=RegisterWindowMessage('System Wide User Defined Message');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('ok');
end;
WindowFromPoint(m)是取M坐标点处的句柄,在这里当然也就是鼠标的位置。
sendMessage(WindowFromPoint(m), WM_LBUTTONDOWN, 0, 0);
SendMessage(WindowFromPoint(m), WM_LBUTTONUP, 0, 0);
其实关键就是lParam 的格式问题.
前面几位回答的MakeLParam 函数没有尝试过,自己用了个
StrToInt(#36+IntToHex(Y,4)+IntToHex(X,4)))
达到了预期效果。结贴给分了