一个随机变化标题的窗口的句柄如何取得?谢(100分)

  • 主题发起人 主题发起人 liuer
  • 开始时间 开始时间
L

liuer

Unregistered / Unconfirmed
GUEST, unregistred user!
一个随机变化的窗口标题,这个的窗口句柄如何取得?<br>比如QQ在查找用户后,窗口标题为"查询结果:在线用户数XXXXXXXXX",这是变化的
 
还可以用类名来查。
 
楼上的朋友,详细一点啊
 
你应该是用Findwindow来查找是吧?<br>Findwindow里面有两个参数,第一个是类名,第二个是标题,不知道就不填。<br>打开一个空的记事本,下面两条语句是等价的。<br>&nbsp; ShowMessage(IntToStr(Findwindow('Notepad', nil)));<br>&nbsp; ShowMessage(IntToStr(Findwindow(nil, '未定标题 - 记事本')));<br>所以如果窗体标题是变动的,就找类名好了。
 
同意楼上说的。<br>可以用spy++查找窗体类名。
 
不好意思,我是新手,请问在程序中如何自动识别控件的类名?
 
查找窗体的另外一个方法<br>function WindowFromPoint(P:TPoint):HWND;<br>&nbsp; 给定坐标返回窗口句柄!
 
关注!<br>我总觉得用FindWindow来找窗口句柄,不好!听听别人的看法吧[:)]
 
GetWindowClass(WHandle) 获得一个窗口类名,<br>&nbsp;推荐用 EnumWindows 获得窗口句柄。<br>&nbsp;用鼠标取窗口句柄:getcursorpos, WindowFromPoint 在Timer中使用。
 
&nbsp;为了定位一个目标,我们可以通过多个特征联合进行判断。对于本问题而言,可以利用下<br>列特征:<br><br>1.窗体标题 &nbsp;(枚举系统中的所有窗体,遍历标题,进行字符串Pos)<br>2.窗体类名 &nbsp;(MSDN)<br>3.窗体所在进程对应的EXE文件名称以及路径 &nbsp;(MSDN)<br>4.窗体的Icon<br>5.窗体的外观 &nbsp;(截屏)<br>6.枚举窗体的子控件以及子控件的文本内容 &nbsp;(MSDN)
 
可是我用工具查找我想要的东东,它的类名是#32770。请问,这是什么类?是不是未知类的代码?而且好多类都是这个东东。NND。有什么高见?
 
&gt;&gt;不好意思,我是新手,请问在程序中如何自动识别控件的类名?<br>这里的类名不是Delphi的类, 而是Windows的窗口类,一般就是应用程序的名称
 
#32770 = 对话框类<br><br>可以递归遍历所有窗口,通过类名并结合这个窗口的其它特征(比如他的父窗口可以确定,或者它包含某个可以确定的子窗口,甚至它的大小以及top&amp;left...)
 
建议用enumChildWindow来历出子窗口的特殊,从而判断哪个是QQ程序的窗口<br>具体使用你搜一下,很多的
 
EnumChildWindow的几个参数都是IN型的,怎么返回内容?<br>本人倒是使用过GetWindow来遍历当前窗口的前以及后位置的主窗体,<br>而对每个子窗体再利用ChildWindowsFromPointEx来获取其子窗体(控件),用<br>GetClassName来获取对应类名,<br><br>本人使用的树状结构遍历,<br><br>但是发现的问题是,子窗体叠加(如PageControl等)则找不到所有的子窗体,<br><br>如果兴趣,再联系
 
EnumChildWindow比较好用
 
同意楼上的。聪明。。。
 
EnumWindows这个函数是用来遍历窗体的,操作系统会自动遍历所有窗口,然后把每个<br>遍历到的窗口句柄交给我们事先写好的回调函数,实际就是每找到一个调用一次回调函数<br>回调函数我们要先写好,然后调用EnumWindows的时候给出此函数的地址。。<br>针对“比如QQ在查找用户后,窗口标题为"查询结果:在线用户数XXXXXXXXX",这是变化的 &nbsp;”这样写:<br>Main:hwnd; &nbsp;//全局变量<br><br>function Fwin( ahwnd:hwnd; w:integer):boolean;stdcall; //寻找窗口 回调函数<br>var<br>&nbsp; s:string[20];<br>begin<br>&nbsp; result:=true;<br>&nbsp; getwindowtext(ahwnd,pchar(@s[1]),20); &nbsp;//取标题<br>&nbsp; s[0]:=#20; &nbsp;//设置字符串长度<br>&nbsp; if s='查询结果:在线用户数'then &nbsp;main:=ahwnd; <br>end;<br><br>//开始找<br>&nbsp; &nbsp; main:=0;<br>&nbsp; &nbsp; enumwindows(@FWin,0);<br>&nbsp; &nbsp; if main&lt;&gt;0 then 找到;<br>.......
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2572235
 
后退
顶部