正文
vb.net取控件句柄 vbnet获取当前窗口句柄
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
vb中 如何获得窗体中所有控件的句柄
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) 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 GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Const GW_HWNDFIRST = 0
Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5
Private Sub Command1_Click()
Call List1_Click
End Sub
Private Sub Command2_Click()
Dim hwnd As Long
Dim s As String, t As String
List1.Clear
hwnd = GetDesktopWindow()
s = String(256, Chr(0))
GetClassName hwnd, s, 255
s = Replace(s, Chr(0), "")
t = String(256, Chr(0))
GetWindowText hwnd, t, 255
t = Replace(t, Chr(0), "")
List1.AddItem "桌面:" hwnd " 类名:" s " 标题:" t vbCrLf
hwnd = GetWindow(hwnd, GW_CHILD Or GW_HWNDFIRST)
s = String(256, Chr(0))
GetClassName hwnd, s, 255
s = Replace(s, Chr(0), "")
t = String(256, Chr(0))
GetWindowText hwnd, t, 255
t = Replace(t, Chr(0), "")
List1.AddItem "窗口:" hwnd " 类名:" s " 标题:" t vbCrLf
While hwnd 0
hwnd = GetWindow(hwnd, GW_HWNDNEXT)
s = String(256, Chr(0))
GetClassName hwnd, s, 255
s = Replace(s, Chr(0), "")
t = String(256, Chr(0))
GetWindowText hwnd, t, 255
t = Replace(t, Chr(0), "")
List1.AddItem "窗口:" hwnd " 类名:" s "标题:" t vbCrLf
Wend
End Sub
Private Sub Form_Load()
Command1.Caption = "获取所有控件"
Command2.Caption = "遍历所有窗体"
End Sub
Private Sub EnumAllHandles(ByVal hwnd As Long)
Dim hn As Long
Dim firsthd As Long
Dim s As String, t As String
firsthd = GetWindow(hwnd, GW_CHILD)
firsthd = GetWindow(firsthd, GW_HWNDFIRST)
hn = firsthd
Do While hn 0
s = String(256, Chr(0))
GetClassName hn, s, 255
s = Replace(s, Chr(0), "")
t = String(256, Chr(0))
GetWindowText hn, t, 255
t = Replace(t, Chr(0), "")
Text1.Text = Text1.Text "句柄:" hn " 父句柄:" hwnd " 类名:" s "标题:" t vbCrLf
TreeView1.Nodes.Add "k" hwnd, tvwChild, "k" hn, "句柄:" hn " 类名:" s "标题:" t
EnumAllHandles hn
hn = GetWindow(hn, GW_HWNDNEXT)
If hn = firsthd Then Exit Do
Loop
End Sub
Private Sub List1_Click()
If List1.ListIndex = -1 Then Exit Sub
TreeView1.Nodes.Clear
TreeView1.Nodes.Add , , "k" Trim(Str(Val(Mid(List1.Text, 4)))), List1.Text
Text1.Text = ""
EnumAllHandles Val(Mid(List1.Text, 4))
TreeView1.Nodes("k" Trim(Str(Val(Mid(List1.Text, 4))))).Expanded = True
End Sub
'添加两个按钮一个文本框一个列表框和一个树形图
VB获取窗口句柄的详细教程
1、首先在电脑中打开VB软件,然后点击窗口。
2、然后找到窗体布局窗口,就可以在这里,直接拖曳鼠标,设置窗体的位置。
3、如果没有默认打开,回到操作页面中,找到并点击如下图的按钮。
4、也可以找到stateUpPosition这个属性。
5、然后在打开点页面中,就可以根据自己的需要,设置预设的类型了。
vb怎么获取控件句柄和内容
先找到窗口的句柄,再来查找按钮的句柄,如果按钮有文本内容,那就好办,如果没有,那建议你利用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
VB 获取其他程序控件的句柄
一般是用钩子程序vb.net取控件句柄的。
比较复杂vb.net取控件句柄,只能说个大体思路,要花最少30分钟。分太少vb.net取控件句柄了。
API函数的声明就不说了。
先用findwindow找到窗体,用GetWindow和GetClassName获得其窗体内各对象的句柄,从而可以获得文本框的句柄。
最后用SendMessage函数想文本框发送文本。
tWnd = FindWindow(vbNullString, "窗口名")可以获得外部程序窗口的句柄twnd
bwnd = GetWindow(tWnd, GW_CHILD)可以获得该窗口子对象的集合句柄bwnd
Do Until bwnd = 0
GetClassName bwnd, sSave, 250
If InStr(1, UCase(sSave), "EDIT", vbTextCompare) 0 Then
editwnd = bwnd
Exit Do
End If
bwnd = GetWindow(bwnd, GW_HWNDNEXT)
Loop
以上代码可以读到该窗口中的第一个文本框的句柄editwnd
SendMessage editwnd, WM_SETTEXT, 6, "王小明"
以上代码向editwnd中写入“王小明”,6表示其长度。该方法写入时,文本框中原有内容全部覆盖。
VB.net 获取控件句柄
Dim hwnd0 As Integer
Dim hwnd11 As Integer
第二个是你要生成EXE后 运行EXE
第三就是没好像没有文本框控件
关于vb.net取控件句柄和vbnet获取当前窗口句柄的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。