vb怎么获取控件句柄和内容

2024-11-30 02:46:03
推荐回答(2个)
回答1:

  先找到窗口的句柄,再来查找按钮的句柄,如果按钮有文本内容,那就好办,如果没有,那建议你利用SPY++先来察看一下按钮的类型,以此类型为查找参数多次调用FindWindowEx来查找,直到找到的的句柄和Spy++相同,那么这个按钮就找到了。
  按钮类名同样,但是拆激你去遍历的时候它的次序始终是固定的。通过id不可靠,有些有id但是有些id是0。
  clswindow类,里面有个函数etElementHwndByClassName,可以得到指定的次序按钮。加入你要处理旅御袜的按钮是在第二个次序,类名为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

回答2:

VB 中 有句柄 hwnd 的控件,就可以通过 API 函数操作
比如 commandbutton,picturebox
没有句柄 hwnd 的控件就不可以
比悉闹早如 label

通过 API 获取 commandbutton 的Caption

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 GetWindowTextLength Lib "user32" Alias "睁雀GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Private Sub Command1_Click()
Dim i As Long
Dim a As String
i = GetWindowTextLength(Command1.hwnd)
a = String$(i + 1, 0)
GetWindowText Command1.hwnd, a, Len(a)
Print a

End Sub

显示的就是 Command1 的 属弯团性 Caption 值: Command1