FindWindow和FindWindowEx的一个例子

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

函数功能 在窗口列表中寻找与指定条件相符的第一个子窗口 。 该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。 参数; (1)hwndParent:要查找的子窗口所在的父窗口的句柄(如果设置了hwndParent,则表示从这个hwndParent指向的父窗口中搜索子窗口)。 如果hwndParent为 0 ,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。 Windows NT5.0 and later:如果hwndParent是HWND_MESSAGE,函数仅查找所有消息窗口。 (2)hwndChildAfter :子窗口句柄。查找从在Z序中的下一个子窗口开始。子窗口必须为hwndParent窗口的直接子窗口而非后代窗口。如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。如果hwndParent 和 hwndChildAfter同时为NULL,则函数查找所有的顶层窗口及消息窗口。 (3)lpszClass:指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theGlobaIAddAtom函数产生的全局成员。该成员为16位,必须位于lpClassName的低16位,高位必须为0。 (4)lpszWindow:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为 NULL,则为所有窗口全匹配。 返回值 Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 如果函数成功,返回值为具有指定类名和窗口名的窗口句柄。如果函数失败,返回值为NULL。 若想获得更多错误信息,请调用GetLastError函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值