ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 37|回复: 0

[求助] 请教VB.NET区域找到图片就点击,没找到等待15秒后再找

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-29 20:23 | 显示全部楼层 |阅读模式
请教VB.NET区域找到图片就点击,没找到等待15秒后再找

点 Button1后,如果匹配模板出现的屏幕上,鼠标就进行移动点击,如果匹配模板没有出现,就等待它出现,如果15秒没有出现,就重新继续等待,直到匹配模板出现或者程序中继。下面的代码匹配模板不管出不出现,15秒后鼠标都进行点击了,请大神们看看哪里出问题了。
完整的代码在附件


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim templatePath As String = "C:\报表查询.jpg"
        Dim isMatched As Boolean = False

        While Not isMatched
            Try
                AppendTextToTextBox($"开始新的一轮模板匹配尝试,当前时间:{DateTime.Now}")
                Dim screenCapture As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format24bppRgb)
                Using g As Graphics = Graphics.FromImage(screenCapture)
                    g.CopyFromScreen(0, 0, 0, 0, New Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height))
                End Using
                screenCapture = ConvertTo24BitBitmap(screenCapture)

                matches.Clear()
                matches(templatePath) = ProcessTemplateMatch(screenCapture, templates(templatePath))

                If matches(templatePath).Length > 0 Then
                    isMatched = True
                    Dim firstMatch As TemplateMatch = matches(templatePath)(0)

                    Dim x As Integer = firstMatch.Rectangle.Location.X + firstMatch.Rectangle.Width \ 2
                    Dim y As Integer = firstMatch.Rectangle.Location.Y + firstMatch.Rectangle.Height \ 2

                    ' 将屏幕坐标转换为绝对坐标
                    x = (x * 65535) \ Screen.PrimaryScreen.Bounds.Width
                    y = (y * 65535) \ Screen.PrimaryScreen.Bounds.Height

                    ' 移动鼠标到匹配位置
                    SendInput(1, New INPUT() {New INPUT With {.type = 0, .ki = New MOUSEINPUT With {.dx = x, .dy = y, .dwFlags = MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE}}}, Marshal.SizeOf(GetType(INPUT)))

                    ' 执行点击操作
                    SendInput(1, New INPUT() {New INPUT With {.type = 0, .ki = New MOUSEINPUT With {.dwFlags = MOUSEEVENTF_LEFTDOWN}}}, Marshal.SizeOf(GetType(INPUT)))
                    SendInput(1, New INPUT() {New INPUT With {.type = 0, .ki = New MOUSEINPUT With {.dwFlags = MOUSEEVENTF_LEFTUP}}}, Marshal.SizeOf(GetType(INPUT)))

                    AppendTextToTextBox($"成功匹配到模板并执行了点击操作,当前时间:{DateTime.Now}")
                Else
                    ' 如果未匹配到模板,等待15秒后再次尝试
                    AppendTextToTextBox($"本轮模板匹配尝试结束,未匹配到模板,等待15秒后将再次尝试,当前时间:{DateTime.Now}")
                    System.Threading.Thread.Sleep(15000)
                End If
            Catch ex As Exception
                AppendTextToTextBox($"在模板匹配过程中发生异常:{ex.Message}")
            End Try
        End While
    End Sub

上传求教.zip

3.2 KB, 下载次数: 0

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-29 23:51 , Processed in 0.042226 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表