蠢办法:遍历你程序里的所有窗体的所有控件,排除Visible=False的,逐个比较句柄。其中,利用循环嵌套的GetParent函数(API)可以从已知的句柄得到它所在的窗体句柄,从而先找出这个窗体来。
好办法:我也想知道,呵呵。

解决方案 »

  1.   

    先用API找到你所要的窗口的句柄,然后再用findwindow与getclass函数找子窗口(控件)和子窗口(控件)的类名。
      

  2.   

    遍历的方法我也想到了,鉴于表扬自己的目的,前面的朋友到时也会给分的,赫赫
    最后这位朋友说的方法好象能行的
    具体怎么代码实现?
    句柄直已经知道了
    getclass有好几个类似名字的api函数,不太清楚怎么用
    谢谢了.
      

  3.   

    返回的直是long型的,怎么会是类名呢?
      

  4.   

    '可以使用CopyMemory ,varptr,objptr来获取,代码如下:
    '此代码的功能,由地址来获取对象
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen As Long)Private Sub Command1_Click()
    Dim nObjPtr As Long
    nObjPtr = ObjPtr(Me)      '假设nObjPtr为对象的地址Dim o As Object
    'CopyMemory o, ByVal VarPtr(Me), 4   ' 运行这句之后,o就是指向me的对象
    CopyMemory o, nObjPtr, 4    ' 运行这句之后,o就是指向me的对象MsgBox o.Name
    CopyMemory o, 0&, 4         '释放内存
    End Sub
      

  5.   

    Handle和Class之间没有必然联系,如果不怕麻烦,用Enum方法找合适的对象
    也是可行的。
      

  6.   

    如果要操作本工程的对象,不用这么麻烦
    如果是外部的对象,干脆使用API操作,别打算使用VB中的对象方式操作(我认为也不可能)
      

  7.   

    就是操作本工程的对象
    但是调用控件时并不知道控件名,只是消息处理函数的参数传过来了控件的句柄。
    不然能得到刚才获得焦点的控件也可,转入模块中的消息处理程序时,activecontrol对象就是空的了
    前面那位朋友是用地址得到对象,现在是句柄,能从句柄直接得到地址吗?
    我现在就是用最土的方法,each next遍历所有form再遍历control,土吧..