在VB中,已知主窗口句柄,如何用FindWindowEx找到第二个文本框的句柄
获取第一个文本框句柄的方法为h1 = FindWindowEx(874523, 0, "Edit", vbNullString)
那么获取第二个文本框的句柄怎么写代码 展开
首先,一个窗口的句柄根本不是固定的,所以用常量来表示一个窗口句柄是不合适的。VB的窗体都有一个名为hWnd的属性,这个属性里保存的就是这个窗口的句柄。
其次,“#32770”是普通窗体的窗口类名,如果要找这样的窗口,可以用handle = FindWindow(窗口类名, 窗口名)来寻找它。
如果要寻找子窗口的句柄,假设父窗口的句柄为phandle,那么可以用chandle = FindWindowEx(phandle, 0, 子窗口类名, vbNullString)来完成。此时,找到的是父窗口内第一个类名为“子窗口类名”的子窗口。如果要找到下一个子窗口,需要用chandle2 = FindWindowEx(phandle, chandle, 子窗口类名, vbNullString)来完成。
现在,已经知道了第一个子窗口的句柄为h1,子窗口类名为"EDIT",那么我们可以用如下语句来寻找第二个子窗口:
h2 = FindWindowEx(874523, h1, "EDIT", vbNullString)
不过还是建议用一个变量来保存父窗口的句柄。顺便说一下,如果此时h2为0,那就是说,这个父窗口内没有第二个类名为"EDIT"的子窗口了。
第二个文本框没在4002512之下,而是在4002512之下的某个子窗口之下,你可以用C++附带的Spy++,按键精灵附带的按键抓抓等查看窗口局部的工具查看你要找的窗口的子窗口句柄信息,在根据工具反馈的信息来编写你的代码
比如上面的这个窗口,找到Form1的句柄(h)后,可以用FindWindowEx找到Text1的句柄(h1),但是找不到Text2~Text4的,用FindWindowEx(h,0,"Frame1的类名",vbNullString)找到Fram1的句柄(h2)后,用FindWindowEx(h2,0,"Text2的类名",vbNUllString)找到Text2的句柄,但是找不到Text3和Text4的,用FindWindowEx(h2,0,"Frame2的类名,vbNullString)找到Frame2的句柄(h3)后,可以用FindWindowEx(h3,0,"text3的类名",vbnullstring)找到Text3的句柄(h4),接着用FindWindowEx(h3,h4,"Text4的类名",vbNullString)就可以找到Text4的句柄。