首页 > 解决方案 > 在 VB.Net 中设置光标位置

问题描述

是的,这很简单。

我有一个简单的像素搜索功能(在屏幕上搜索棕色像素)。如果它找到一个,它应该将鼠标移动到该位置并单击它。

全屏捕获已经很好用了。为了使整个过程更快,我只想捕获 Form1 窗口(我之前使它透明,因此我可以设置和更改窗口大小以仅捕获我想要的屏幕)。

如果它找到像素,它不会将光标移动到像素位置,而是移动到左上屏幕的某个位置。那是因为它只捕获了form1的x,y而不是整个屏幕,并且将鼠标移动到屏幕上的40、25与form1中40、25的位置不同。

如何将鼠标移动到 Form1 像素位置。

  Dim xd3 As Color = Color.FromArgb(255, 193, 105, 79)
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Integer
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)

Const MOUSEEVENTF_LEFTDOWN As UInteger = &H2
Const MOUSEEVENTF_LEFTUP As UInteger = &H4

Private Sub FindPixels()

    found = False

    Using b As New Bitmap(Me.Width, Me.Height)
        Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(b)
            Try
                g.CopyFromScreen(Me.Left, Me.Top, 0, 0, b.Size)
            Catch
            End Try

            For i = 0 To (b.Width - 1)
                For j = 0 To (b.Height - 1)
                    If b.GetPixel(i, j) = xd3 Then
                        SetCursorPos(i, j)
                        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
                        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
                        found = True
                    End If
                Next
            Next
        End Using

    End Using
End Sub

标签: vb.net

解决方案


没关系,我很笨。通过添加 Me.Location.X 和 Me.Location.Y 来修复它


推荐阅读