比如我把鼠标放在某程序的按钮上,可以获得按钮的句柄,但是获得按钮句柄的同时,我还想获得该按钮所在窗口的标题和句柄,不知道怎么获得,代码要怎么写...

解决方案 »

  1.   

    这个很简单啊
    Private Declare Function GetParent Lib "user32" Alias "GetParent" (ByVal hwnd As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
      

  2.   

    这2个API不知道是不行还是不会用,他只能获取他当层的句柄而已,比如我窗体里有按钮和Frame1容器,当我把按钮放在窗体里,他能获取窗体的标题,但是我把按钮放在Frame1容器里,他获取到的就不是窗体的标题了,而是Frame1容器的标题,,,,,,,
      

  3.   

    Private Type POINTAPI
            x As Long
            y As Long
    End Type
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    Private Const cch = 255
    Private lpString As String * 256Private Sub Timer1_Timer()
        Dim PP As POINTAPI
        Dim myhwnd As Long
        myhwnd = GetCursorPos(PP)
        myhwnd = WindowFromPoint(PP.x, PP.y)
        Label1.Caption = "鼠标所在控件的句柄是:" & myhwnd
        Label2.Caption = "鼠标所在控件的文字是:" & Left(lpString, GetWindowText(myhwnd, lpString, cch))
        Label3.Caption = "鼠标所在控件的父控件的句柄是:" & GetParent(myhwnd)
        Label4.Caption = "鼠标所在控件的父控件的文字是:" & Left(lpString, GetWindowText(GetParent(myhwnd), lpString, cch))
        Label5.Caption = "鼠标所在控件的祖控件的句柄是:" & GetParent(GetParent(myhwnd))
        Label6.Caption = "鼠标所在控件的祖控件的文字是:" & Left(lpString, GetWindowText(GetParent(GetParent(myhwnd)), lpString, cch))
    End Sub
      

  4.   

    那就不断的往上取,结合类名做比较,比如某个窗体的类名是ThunderRT6FormDC,那么不断的GetParent,每次都检测类名,这样就可以判断出来了吧。
      

  5.   

    把myhwnd用GetParent(myhwnd)代替可以一层一层地找下去