注册 登录
编程论坛 VB6论坛

多个子窗口,为什么FindWindowEx只能找到一个?

comb007 发布于 2013-12-26 18:18, 1092 次点击
第三方软件,我的问题窗口是一个像菜单框的窗口。
按钮b,c,d,e...是并排的一行按钮,用spy++不能直接抓取b,c,d,e的句柄,只能抓到父窗口的兄弟,再找到他们的父窗口句柄a
我的目的是:比如当前显示页是b按钮对应的页面,我想找到d按钮句柄然后点击。

于是我用
x=findwindowex(a,0,"类名",vbnullstring)  'x正确,x为b按钮的句柄。
y=findwindowex(a,x,"类名",vbnullstring)  'y=0   ????没有下一个?

然后我把当前显示页改为d按钮对应页面,重复上述调试,
x=findwindowex(a,0,"类名",vbnullstring)  'x正确,x为d按钮的句柄。
y=findwindowex(a,x,"类名",vbnullstring)  'y=0   ????没有下一个?

我的问题是:只能找到当前页面所对应的按钮的句柄,其他按钮的句柄怎么找不出来?


用spy++不能直接看出b,c,d,e是同级子窗口,但推测是。因为父窗口都为a,类名都一样。
用spy++找到父窗口兄弟,再找到父窗口,再找到一个子窗口。但仅能找到一个,没有下一个。并且每次找到的这个子窗口是当前显示页所对应的按钮。

用标题做参数也找不到。


新手,望前辈们指点!
刚注册只有20分,向节约点。
6 回复
#2
seafish0112013-12-27 02:33
你写的两句代码是正确的。
其实不一定是你代码的问题,有可能是你所找的那个控件不是BUTTON(当然不排除有其它的可能)。
#3
comb0072013-12-27 20:10
谢谢你的回复,那个控件不是button,类名是“WindowsForms10.windows.8.app.0.37873a”,请问这是什么控件,如何寻找?鼠标是可以点击的。
#4
comb0072013-12-27 23:24
另外再问,findwindow的参数可以带*号吗?

我用findwindow("类名","AAA*")和findwindow("类名","AAA" & "*")都不行,请问如何实现这种目的?
#5
seafish0112013-12-28 00:37
以下是引用comb007在2013-12-27 20:10:13的发言:

谢谢你的回复,那个控件不是button,类名是“WindowsForms10.windows.8.app.0.37873a”,请问这是什么控件,如何寻找?鼠标是可以点击的。

“WindowsForms10.windows...”这些控件最有可能是用.NET写的。你去了解下managed spy++。
#6
seafish0112013-12-28 00:54
以下是引用comb007在2013-12-27 23:24:01的发言:

另外再问,findwindow的参数可以带*号吗?

我用findwindow("类名","AAA*")和findwindow("类名","AAA" & "*")都不行,请问如何实现这种目的?

有个笨办法就是:列举该类名的窗体名称,然后再比较窗体名称与目标结果。
#7
comb0072013-12-28 01:31
谢谢,网上搜了很多,也就是这两个答案。
1