理论:
GetDesktopWindow是取得代表整个屏幕的窗口的句柄。
WindowFromPoint是取得包含指定点的窗口的句柄。
要是把鼠标指针放在桌面,用GetCursorPos取得鼠标的位置点,后用WindowFromPoint取得此时
鼠标位置点的窗口的句柄。应该和GetDesktopWindow取得的句柄应该是相同的。测试:
在Form1上放二个edit,一个button.(设置button在Form1显示时拥有焦点)
button的onclick事件代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
a,c:HWND;
b:Tpoint;
begin
a:=GetDesktopWindow;
edit1.Text :='GetDeskTopWindow '+inttostr(a);
getcursorpos(b);
c:=WindowFromPoint(b);
edit2.Text :='WindowFromPoint '+inttostr(c);
end;
注意:当Form1显示后把鼠标放到桌面上,不在Form1里。因为button1一开始就有焦点,所以,只要按
一下Enter键就可测试了。结果如下(我的电脑是这样的):
edit1上显示:GetDeskTopWindow 65556
edit2上显示:WindowFromPoint 786598多次测试的结果表明两者不相同???我自己也不知道是怎么回事,是不是我的“理论”错了。还请高手指点。
GetDesktopWindow是取得代表整个屏幕的窗口的句柄。
WindowFromPoint是取得包含指定点的窗口的句柄。
要是把鼠标指针放在桌面,用GetCursorPos取得鼠标的位置点,后用WindowFromPoint取得此时
鼠标位置点的窗口的句柄。应该和GetDesktopWindow取得的句柄应该是相同的。测试:
在Form1上放二个edit,一个button.(设置button在Form1显示时拥有焦点)
button的onclick事件代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
a,c:HWND;
b:Tpoint;
begin
a:=GetDesktopWindow;
edit1.Text :='GetDeskTopWindow '+inttostr(a);
getcursorpos(b);
c:=WindowFromPoint(b);
edit2.Text :='WindowFromPoint '+inttostr(c);
end;
注意:当Form1显示后把鼠标放到桌面上,不在Form1里。因为button1一开始就有焦点,所以,只要按
一下Enter键就可测试了。结果如下(我的电脑是这样的):
edit1上显示:GetDeskTopWindow 65556
edit2上显示:WindowFromPoint 786598多次测试的结果表明两者不相同???我自己也不知道是怎么回事,是不是我的“理论”错了。还请高手指点。
楼上说的没错,你可以用spy++好好看看。