function GetSursorPos(
lpPoint:LPPOINT //指向鼠标位置的指针
);BOOL;stdcall;
如果上面的函数执行成功,返回一个非零的值,并将鼠标位置存在lpPoint中,
用上面的函数取得鼠标位置后,用WindowFromPoint函数通过鼠标坐标取得
该点的窗口句柄:
function WindowFromPoint(
Point:TPoint //TPoint结构,存着鼠标坐标点
)HWND;stdcall;
如果WindowFromPoint执行成功,返回窗口句柄,否则返回NULL,注意此函数不能
取得隐藏的或处于不活动状态的窗体,即使这个坐标点就处于其窗口内,要进行无限
搜索,用ChlidWindowFromPoint函数:
function ChlidWinfowFromPoint(
hWndParent:HWND; //父窗口句柄
Point:TPoint; //坐标点
)HWND;stdcall
举例:
1.创建一个新的应用程序;
2.往Form1中加入一个Memo1和一个Timer1;
procedure TForm1.Timer1Timer(Sender:TObject);
var
aClassName,aWndText:array[0..254] of char;
hWnd,hWndOwer:hWnd; //等于hWndOwer:THandle
pos:TPoint;
begin
//取得鼠标位置
GetCursorPos(pos);
//根据鼠标位置得到它所在的窗体句柄
hWnd:=WindowFromPoint(pos);
//由窗口句柄得到窗口类名和标题
GetClassName(hWnd,@aClassName,255);
GetWindowText(hWnd,@aWndText,255);
//显示
with Memo1.Lines do
begin
Clear;
Add('窗体句柄:'+IntToStr(hWnd));
Add('窗体类名:'+aClassName);
Add('窗体标题:'+aWndText);
end;
//由窗口句柄得到父窗体
hWndOwer:=GetWindow(hWnd,GW_OWNER);
GetClassName(hWndOwer,@aClassName,255);
GetWindowText(hWndOwer,@aWndText,255);
with Memo1.Lines do
begin
Add('父窗口句柄:'+IntToStr(hWndOwer));
Add('父窗口类名:'+aClassName);
Add('父窗口标题:'+aWndText);
end;
end;
3.往Form1中加入一个Button1;
procedure TForm1.Button1Click(Sender:TObject);
begin
Timer1.Enable:=not Timer1.Enable;
if Timer1.Enable then
Button1.Caption:='停止'
else
Button1.Caption:='开始';
end;