VB.NET操作其它软件界面

VB.NET操作另一个软件界面的文本框和按钮
但是这种方法有缺陷,软件重启后控件ID就变了,不好用
控件ID是通过SPY获取到的,16进制转成10进制得来的

Public Class Form1
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As IntPtr, ByVal nIDDlgItem As Integer) As IntPtr
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private Declare Function SendMessageTimeout Lib "user32.dll" Alias "SendMessageTimeoutA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer, ByVal fuFlags As Integer, ByVal uTimeout As Integer, ByRef lpdwResult As Integer) As Integer
    Private Const BM_CLICK As Integer = &HF5
    Private Const WM_SETTEXT As Integer = &HC
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim hWnd As IntPtr = FindWindow(Nothing, "Huaray GUI V2.0")
        SendMessage(GetDlgItem(hWnd, 459666), WM_SETTEXT, 0, "文本框111")
        SendMessage(GetDlgItem(hWnd, 722086), WM_SETTEXT, 0, "文本框222")
        SendMessage(GetDlgItem(hWnd, 197400), BM_CLICK, 0, 0)
    End Sub
End Class

另外一种方法,根据类名获取控件句柄

Public Class Form1
    Private Declare Auto Function FindWindowEx Lib "user32.dll" (ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr
    Private Declare Auto Function SendMessage Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As String) As IntPtr
    Private Const WM_SETTEXT As Integer = &HC
    Private Const BM_CLICK As Integer = &HF5

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim hWndParent As IntPtr = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "WindowsForms10.Window.8.app.0.141b42a_r6_ad1", "亚纳秒光纤激光器软件 V1.9            BY HUARAY")
        Dim hWndChildTabControl As IntPtr = FindWindowEx(hWndParent, IntPtr.Zero, "WindowsForms10.SysTabControl32.app.0.141b42a_r6_ad1", Nothing)
        Dim hWndChildCssz As IntPtr = FindWindowEx(hWndChildTabControl, IntPtr.Zero, "WindowsForms10.Window.8.app.0.141b42a_r6_ad1", "参数设置")
        Dim hWndChildPl1 As IntPtr = FindWindowEx(hWndChildCssz, IntPtr.Zero, "WindowsForms10.Window.8.app.0.141b42a_r6_ad1", "频率1")
        Dim hWndChild As IntPtr = IntPtr.Zero
        Dim i As Integer
        i = 1
   '遍历所有控件,但是顺序没有搞清楚,不是根据TabIndex
        Do While True
            hWndChild = FindWindowEx(hWndChildPl1, hWndChild, "WindowsForms10.EDIT.app.0.141b42a_r6_ad1", Nothing)
            If hWndChild <> IntPtr.Zero Then
                SendMessage(hWndChild, WM_SETTEXT, IntPtr.Zero, i)
                i = i + 1
            Else
                Exit Do
            End If
        Loop
        ' hWndChild = FindWindowEx(hWndChildPl1, IntPtr.Zero, "WindowsForms10.EDIT.app.0.141b42a_r6_ad1", "13") '根据文本框内容找不到对应的文本框,Nothing和""效果一样
        SendMessage(hWndChild, WM_SETTEXT, IntPtr.Zero, "dsdf")
        ' 点击按钮
        SendMessage(hWndChild, BM_CLICK, IntPtr.Zero, IntPtr.Zero)
    End Sub
End Class
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值