谁知道怎么可以得到一个应用程序某一个控件在窗体上的坐标位置(50分)

  • 主题发起人 主题发起人 aipingren
  • 开始时间 开始时间
A

aipingren

Unregistered / Unconfirmed
GUEST, unregistred user!
不是自己写的程序,是其他程序里,比如此程序里有个按纽,想知道此按钮在该窗体的位置坐标,该怎么得到?有这样的软件吗?SPY能吗?》能的话,该怎么得到?我是初学者!
 
当然可以了。先hook,然后拦截函数,在函数中获得坐标。<br>懂了这个道理,就可以实现屏幕取词功能。<br><br>低价转让win98,win2k,winxp屏幕取词原代码。可取IE。linsen633@sohu.com
 
我是这样用的:<br>---------------------------<br>加一个Timer,OnTimer里面写<br><br>var curPos : TPoint;<br>begin<br>&nbsp; &nbsp; &nbsp;GetCursorPos(curPos);<br>&nbsp; &nbsp; &nbsp;Label1.Caption := 'X:' + IntToStr(curPos.x) + ' Y:' + IntToStr(curPos.y);<br>end;
 
用Spy++就可以看到,你也可以通过他得到该按钮的handle,然后通过BOOL GetWindowRect(HWND hWnd,LPRECTlpRect);得到矩形区域,这个区域的坐标就是按钮的坐标[:)]
 
方法一:建立一个监视鼠标消息的全局钩子,自己搜索一下,很多的.---&gt;getcursorpos(获得当前鼠标坐标位置)---&gt;windowfrompoint(根据该坐标获得它的句柄)---&gt;GetClientRect(获得它的客户坐标)<br>方法二:<br>var<br>&nbsp; &nbsp;myhandle : THandle;//本地全局变量<br>{$R *.dfm}<br>function EnumerateChildWindows(hWnd: HWND; lParam: LPARAM): BOOL;stdcall;<br>var//枚举函数<br>&nbsp; windowCaption:array[0..254] of Char;<br>begin<br>&nbsp; GetWindowText(Hwnd,WindowCaption,255);<br>&nbsp; if WindowCaption ='你要求的该按钮标题' then<br>&nbsp; &nbsp; myhandle := hWnd;//找到的按钮句柄<br>&nbsp; Result:=true;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; Hnd : HWnd;<br>&nbsp; myrect:Trect;//存放坐标<br>begin<br>&nbsp; Hnd := FindWindow( nil, '按钮所在窗体的标题);//找该程序窗体的句柄<br>&nbsp; if Hnd = 0 then exit;//没找到,退出<br>&nbsp; EnumChildWindows( H, @EnumerateChildWindows, 0 );<br>&nbsp; GetClientRect(myhandle,@myrect);<br>&nbsp; label1.caption:=format('%d,%d',[myrect.x,myrect.y]);<br>&nbsp;<br><br><br><br>end;<br>
 
上面的代码有点太随手了,现为我调试通过的.<br>var<br>&nbsp; &nbsp;myhandle : THandle;//本地全局变量<br><br>function EnumerateChildWindows(hWnd: HWND; lParam: LPARAM): BOOL;stdcall;<br>var//枚举函数<br>&nbsp; windowCaption:array[0..254] of Char;<br>begin<br>&nbsp; GetWindowText(Hwnd,WindowCaption,255);<br>&nbsp; if WindowCaption ='取消' then<br>&nbsp; &nbsp; myhandle := hWnd;//找到的按钮句柄<br>&nbsp; Result:=true;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; Hnd : HWnd;<br>&nbsp; myrect:Trect;//存放坐标<br>begin<br>&nbsp; Hnd := FindWindow( nil, '远程桌面连接');//找该程序窗体的句柄<br>&nbsp; if Hnd = 0 then exit;//没找到,退出<br>&nbsp; EnumChildWindows( Hnd, @EnumerateChildWindows, 0 );<br>&nbsp; Getwindowrect(myhandle,myrect);<br>&nbsp; label1.caption:=format('%d,%d,%d,%d',<br>&nbsp; [myrect.left,myrect.top,myrect.right,myrect.bottom]);<br>end;<br>///目前我只能得到屏幕下的坐标,不知道有没有得到客户坐标的函数?
 
后退
顶部