FindWindow和FindWindowEx的一个例子
Windows API:
FindWindow 查找窗口的句柄
FindWindowEx 查找子窗口的句柄
SendMessage 发送消息
2024-02-27 vs2013 vb net 调试 成功
a2 = "Form1"
a3 = "查找"
v = FindWindow(vbNullString, a2)
vv = FindWindowEx(v, vbNullString, vbNullString, "1586672559")
==========
Public Class Form1
<System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="MoveWindow")> _
Public Shared Function _
MoveWindow(ByVal hwnd As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Integer) As Integer
End Function
<System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="FindWindowEx")> _
Public Shared Function _
FindWindowEx(ByVal parentHandle As Integer, _
ByVal childAfter As Integer, _
ByVal lclassName As String, _
ByVal windowTitle As String) As Integer
End Function
<System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="FindWindow")> _
Public Shared Function _
FindWindow(ByVal lclassName As String, _
ByVal windowTitle As String) As Integer
End Function
Private Declare Auto Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
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
Public Const WM_SETTEXT = &HC '设置窗体的Caption
Public Const WM_GETTEXT = &HD '取得窗体的caption
Private Const WM_GETTEXTLENGTH As Integer = &HE
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim s As String
Dim n As Long
Dim hHwnd As Long
TextBox1.Text = "aaa"
hHwnd = TextBox1.Handle '控件句柄
'n = GetWindowTextLength(hHwnd) '控件文本长度
' s = Space(n)
'Call GetWindowText(hHwnd, s, n + 1)
MsgBox(s)
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim a1 As String
a1 = "查找"
a1 = "字体"
'Dim hWndP As Integer = FindWindow(vbNullString, a1)
' MsgBox(Hex(hWndP))
Dim h As Integer
h = FindWindowEx(0, 0, vbNullString, "字体")
MsgBox("字体 " + Hex(h))
Dim aa As String
h = &H200254
SendMessage(h, WM_SETTEXT, 0, "aaaa")
SendMessage(h, WM_GETTEXT, 7, aa)
MsgBox(aa)
Dim h1 As Integer
h1 = FindWindowEx(h, 0, vbNullString, "微软雅黑")
MsgBox(Hex(h1))
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Dim v As Integer
Dim vv As Integer
Dim a3 As String, a2 As String, a5 As String
a2 = "Form1"
a3 = "查找"
a5 = "现代网赚交流群"
a5 = "桂系特色美食的资料"
'SendMessage(TextBox1.Handle, WM_SETTEXT, 0, "h1")
v = FindWindow(vbNullString, a5)
'SendMessage(v, WM_SETTEXT, vbNullString, "hhccdd")
'SendMessage(Button1.Handle, WM_SETTEXT, 0, "h1")
MsgBox(v)
If v <> 0 Then
'MsgBox("find form1")
'Console.WriteLine("找到了窗体!");
vv = FindWindowEx(v, vbNullString, vbNullString, "1586672559")
'MsgBox(Hex(vv))
If vv <> 0 Then
'MsgBox("find text1box")
Dim aa As String
MsgBox(Hex(vv))
'SendMessage(vv, WM_SETTEXT, vbNullString, "aaaa")
aa = "ccccccc"
SendMessage(vv, WM_GETTEXT, 9, aa)
SendMessage(vv, WM_SETTEXT, vbNullString, "hhccdd")
MsgBox(aa)
Else
MsgBox("not find textbox1")
End If
'SendMessage(maindHwndp, WM_GETTEXT, buffer_size, Buffer)
Else
MsgBox("not find")
End If
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
SendMessage(TextBox1.Handle, WM_SETTEXT, 0, "aaa")
Dim hdl As Integer
hdl = Label1.Handle
Dim textLength As Integer = SendMessage(hdl, WM_GETTEXTLENGTH, 0, Nothing)
textLength = textLength + 1
MsgBox(textLength)
' 创建字符串缓冲区
Dim build As String
build = "ccccccc"
' 查询Edit中文本
'SendMessage(hdl, WM_SETTEXT, 5, "h1")
SendMessage(hdl, WM_GETTEXT, textLength, build)
' 显示
MsgBox(build)
SendMessage(Button4.Handle, WM_SETTEXT, vbNullString, "hhccdd")
End Sub
End Class