首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

获取窗体控件句柄子的有关问题,

2012-03-07 
获取窗体控件句柄子的问题,高手进!上次在此论坛发了一贴,可能问题没有说明清楚,后我尝试多种方法仍未解决,

获取窗体控件句柄子的问题,高手进!
上次在此论坛发了一贴,可能问题没有说明清楚,后我尝试多种方法仍未解决,特再来此一游烦请各位大侠拨刀相助究竟问题出于何处?

问题详细描述如下:

父窗体标题:   "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,更是不行了,因为你要查找的窗口不是顶级窗口

热点排行