关于在spy中查看窗口中按钮的问题.(200分)

  • 主题发起人 主题发起人 question
  • 开始时间 开始时间
Q

question

Unregistered / Unconfirmed
GUEST, unregistred user!
相关程序请下载 http://www.nclx.com/0005.exe (280k)<br>其中的 001.jpg 是屏幕截图,现在的问题是在 spy 中只能看见标准的按钮,而 TSpeedButton 类的按钮却查看不到.<br>如何能在其它的程序中发送指令点击那个 6666666 的按钮?<br>关键问题是如何找到它,使用标准的方法好像都无法找到它,就像 spy 也无法发现它一样。
 
TSpeedButton是从TGraphicControl继承下来的,没有HANDLE,所以你在别的程序是看不到的。如果你知道它的位置,倒是可以给它的父窗口发送 WM_LBUTTONUP 消息
 
能不能给点提示代码?就用我的哪个工程文件,如何按那个 666666 按纽.
 
针对你这个程序来说,用下面的代码可以实现控制:<br>var<br>&nbsp; pt: TPoint;<br>&nbsp; hPanel: THandle;<br>begin<br>&nbsp; hPanel := 1312162; //你的PANEL1的Handle,自己取得<br>&nbsp; //pt := Point(SpeedButton1.Left, SpeedButton1.Top);<br>&nbsp; //其实应该是上面的值,但我这时是知道你的SpeedButton1的位置的,所以直接写<br>&nbsp; pt.X := 8; &nbsp;<br>&nbsp; pt.Y := 192;<br>&nbsp; //触发OnClick事件<br>&nbsp; PostMessage(hPanel, WM_LBUTTONDOWN, 0, MakeLong(pt.X, pt.Y));<br>&nbsp; PostMessage(hPanel, WM_LBUTTONUP, 0, MakeLong(pt.X, pt.Y));<br><br>所以,关键是如果知道你的SpeedButton1的位置,给它的父窗口(Panel1)发消息即可
 
To xianjun;<br>如果这个程序不是我写的我没有程序的 sourcecode ,如何得到 pt 的位置??<br>而且目标程序可能是加了壳,无法用 dede 类的工具 Un 出来.<br><br>&gt;&gt; //pt := Point(SpeedButton1.Left, SpeedButton1.Top);<br>类似上面的这个,我在程序中也无法获得。
 
所以我在上面说了一个前提“如果你知道它的位置” [:)]<br>如果你写的是一个针对某个程序的功能,那是有办法的,因为它的SPEEDBUTTON不会随机改变位置的吧? 所以你只要手工算出它的位置,然后给它的PARENT发消息就OK了。程序中是无法获得的了,因为它没有HANDLE,相当于是画上去的,你用API能取得别人FORM上画的一个BUTTON吗?显然是不行吧
 
谢谢了,基本上只能用笨方法去找位置了。
 
后退
顶部