使用GetClassName可以得到窗口的类名,可是对于VB的自定义用户控件返回的都是"ThunderRT6UserControlDC",有没有什么API可以具体得出VB的自定义控件的名称。不知我说清楚了没有。如:一个自定义控件被命名为mycommand,另一个被命名为mylist,如何可以根据句柄得出这个mycommand或mylist呢?
我无法使用TypeName函数,因为我只有一个hwnd。

解决方案 »

  1.   

    是想根据窗口hwnd,得到相应的控件名称吧?这个目前还没有比较好的解决方案(可以根据PE的文件格式写,不过难度很大)
    不过如果这个控件是你写的话,应该有办法可以变通实现
      

  2.   

    re://rainstormmaster(暴风雨 v2.0) 
    我不是要这个控件的名称(name),我不知道我应该如何描述它。举例来讲:VB新建的一个控件默认名称为Usercontrol1,而我们通常要改它的名称为我们自己的控件名,比如叫MyUserCtl,可是无论你给他取了什么名,用GetClassName得到的都是相同的名称,我想我是不是用错了API?我想根据句柄hWnd来得到这个结果:MyUserCtl。
      

  3.   

    明白了,你是要取控件的类名(progid),一般情况下可以用TLI获取,不过用tli需要一个activex对象,而根据hwnd得到activex对象,需要对com极其熟悉(目前我还做不到,只有一些模糊的思路,但还没有时间进行验证),而得到activex对象后,获得其progid或者name就都不是困难的事情了
      

  4.   

    看来这个控件是你自已写的,如果是这样你可以采取另外一种变通的方案,尽管并不十分完美,但通常可以解决问题。这个方案就是使用SetProp、GetProp来对控件进行标识:
    Private Sub UserControl_ReadProperties()
        SetProp UserControl.hwnd, "MyUserCtl", 99999
    End Sub
    Private Sub UserControl_Terminate()
        RemoveProp UserControl.hwnd, "MyUserCtl"
    End Sub当你想得到一个这个值时,可以使用
    if GetProp(hwnd, "MyUserCtl")=99999 then
      debug.print 是我的控件
    end if