就是我通过FindWindowEx来获取一个程序中的一个按钮的句柄,可是那个程序上的按钮类名都是一样的,而且都没有标题,怎么获取指定按钮的句柄
VB句柄

解决方案 »

  1.   

    既然你是获取第三方程序的,那就在获取句柄后,再 GetWindowRect(),按位置及大小来区分是哪个按钮就行了。
      

  2.   

    先找到窗口的句柄,再来查找按钮的句柄,如果按钮有文本内容,那就好办,如果没有,那建议你利用SPY++先来察看一下按钮的类型,以此类型为查找参数多次调用FindWindowEx来查找,直到找到的的句柄和Spy++相同,那么这个按钮就找到了。
    http://download.csdn.net/detail/veron_04/3291019
      

  3.   

    GetDlgItem,如果你知道按钮的ID的话。
      

  4.   

    按钮类名同样,但是你去遍历的时候它的次序始终是固定的。通过id不可靠,有些有id但是有些id是0。借机推荐下我封装的clswindow类,里面有个函数GetElementHwndByClassName,可以得到指定的次序按钮。加入你要处理的按钮是在第二个次序,类名为Button,那么就用:GetElementHwndByClassName("Button",2),即可,具体代码:
    Private Sub Command6_Click()
        Dim w As New clsWindow
        Dim i%
        If w.GetWindowHwndByTitleEx("自动化操作框架") > 0 Then
            i = i + 1
            Do While w.GetElementHwndByClassName("ThunderCommandButton", i) > 0'按次序遍历
                MsgBox w.GetElementHwndByClassName("ThunderCommandButton", i)'得到当前次序按钮的句柄
                w.SetElementTextByClassName "ThunderCommandButton", "次序" & i, i'设置按钮文本
                i = i + 1
            Loop
        End If
    End Sub打包下载:
    http://files.cnblogs.com/sysdzw/clsWindow1.8_demo8_%E8%8E%B7%E5%8F%96%E6%97%A0%E6%A0%87%E9%A2%98%E6%8C%89%E9%92%AE%E5%8F%A5%E6%9F%84.zip
      

  5.   

    上面地址不能保证一直有效。如果不能下载的话用这个地址:http://download.csdn.net/detail/sysdzw/5833701