获取窗体控件句柄子的问题,高手进!
上次在此论坛发了一贴,可能问题没有说明清楚,后我尝试多种方法仍未解决,特再来此一游烦请各位大侠拨刀相助究竟问题出于何处?
问题详细描述如下:
父窗体标题: "228X Production - C:\users\grprog1\boards\123\123.obc - Runtime System "
父窗体控件名称: "GR_Execution_Class "
各子窗体(控件)标题: "Template 2 "--> vbNullString(此控件无标题)--> 此控件标题是变量(是三行提示如何输入的说明)
各子窗体(控件)名称: "#32770 "--> "Static "--> "RICHEDIT "
部分程序见下:
Private Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32 " Alias "FindWindowExA " (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
aHwnd = FindWindow( "GR_Execution_Class ", "228X Production - C:\users\grprog1\boards\123\123.obc - Runtime System ")
Print aHwnd
bHwnd = FindWindowEx(aHwnd, ByVal 0&, "#32770 ", "Template 2 ")
Print bHwnd
cHwnd = FindWindowEx(bHwnd, ByVal 0&, "Static ", vbNullString)
Print cHwnd
'1> dHwnd = FindWindowEx(cHwnd, ByVal 0&, "RICHEDIT ", vbNullString)
'2> dHwnd = FindWindowEx(cHwnd, ByVal 0&, ByVal 0&, ByVal 0&)
'3> dHwnd = FindWindowEx(cHwnd, ByVal 0&, ByVal 0&, vbNullString)
'4> dHwnd = FindWindow( "RICHEDIT ", vbNullString)
'5> dHwnd = FindWindowEx(cHwnd, ByVal 0&, "RICHEDIT ", ByVal 0&)
'6> dHwnd = GetNextWindow(cHwnd, xhwnd) '5获取子窗体,2获取下一个窗体,1获取父窗体下另一个窗体
7> ' EnumChildWindows cHwnd, AddressOf EnumChildProc, ByVal 0& 枚举子窗口
Debug.Print dHwnd
GetClassName dHwnd, claName, 255
Debug.Print claName
问题:
为何我前面几个父窗体和控件句柄都可以查找出来,但是就是最后一个我想要的RICHEDIT控件句柄返回是0呢?以上1> --7> 方法都试过了,返回均为0,1到5我可以确定语法等没问题,6到7根据网上提供的资料如上所写查找结果一样为0,不知道对否.用SPY查了可以100%确定控件RICHEDIT是控件Static的子窗体,但是由于控件RICHEDIT窗体的标题不确定,所以造成句柄查找不便,所以我用vbNullString代替.
上一贴参考:
http://community.csdn.net/Expert/topic/5556/5556370.xml?temp=.3981592
任何问题,我的MAIL:JLBB102@yahoo.com.cn
QQ:41716440
[解决办法]
在最后一层父窗口上遍历当前窗口的子窗口
试试
[解决办法]
给个程序的下载地址,按你所述用:
dHwnd = FindWindowEx(cHwnd, ByVal 0&, "RICHEDIT ", vbNullString)
即可,或用:
dHwnd = FindWindowEx(cHwnd, ByVal 0&, vbNullString, vbNullString)
也可
注意:0和vbNullString在API中调用是有区别的,所以2 3 5不可取
至于4,更是不行了,因为你要查找的窗口不是顶级窗口