web浏览器中31/5000鼠标位置不正确[关闭]

问题描述 投票:0回答:2

我已经开始构建机器人,我已经尝试将鼠标位置存储在变量x和y上,然后我点击开始将鼠标移动到该位置但是我启动机器人的位置不正确。我怎样才能得到它的真实位置。我试过这样但是我无法在web浏览器中获得鼠标x,y的正确位置

我已经制作了一个问题的gif图像imgur链接https://imgur.com/a/QQLQX我也编辑我的代码并尝试不同的方式但我无法得到正确的位置

这是我的代码

Public Class Form1
Dim horas
Dim minutos
Dim segundos
Dim milesimos
Dim ratobutao
Dim tipoclick
Dim repetir
Dim currentelocal
Dim xmouse
Dim ymouse
Dim WithEvents htmldoc As HtmlDocument
Private Sub htmldoc_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles htmldoc.MouseMove
    'TextBox5.Text = e.MousePosition.X.ToString
    'TextBox6.Text = e.MousePosition.Y.ToString
    'xmouse = e.MousePosition.X.ToString
    'ymouse = e.MousePosition.Y.ToString
End Sub
Private Sub htmldoc_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles htmldoc.MouseDown
    'xmouse = e.MousePosition.X.ToString
    'ymouse = e.MousePosition.Y.ToString
    'TextBox5.Text = e.MousePosition.X.ToString
    'TextBox6.Text = e.MousePosition.Y.ToString
    xmouse = Me.Width / WebBrowser1.Width
    ymouse = Me.Height / WebBrowser1.Height
    TextBox5.Text = e.MousePosition.X.ToString
    TextBox6.Text = e.MousePosition.Y.ToString
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    WebBrowser1.Navigate("www.google.com")
    For Each c As Control In Controls
        AddHandler c.MouseClick, AddressOf ClickHandler
    Next
End Sub
Private Sub ClickHandler(sender As Object, e As MouseEventArgs) Handles Me.MouseClick


    Select Case e.Button
        Case MouseButtons.Left
            MsgBox("left mouse")
            TextBox5.Text = xmouse
            TextBox6.Text = ymouse
            Label2.Text = "Left"
        Case MouseButtons.Right
            Label2.Text = "Right"
        Case MouseButtons.Middle
            Label2.Text = "Middle"
        Case Else
            Label2.Text = "Some other button"
    End Select
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    htmldoc = WebBrowser1.Document
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox5.Text = xmouse
    TextBox6.Text = ymouse

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Windows.Forms.Cursor.Position = New Point(xmouse, ymouse)
    Timer1.Stop()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Timer1.Start()
End Sub
End Class
vb.net
2个回答
3
投票

使用图形界面进行编程时,需要注意三种不同的坐标集:屏幕,窗口和客户端。不同的上下文提供来自不同区域的坐标。您需要知道您拥有什么类型的坐标,以及如何在其他坐标之间进行转换。此图片说明:

Different Coordinate Types

在多监视器情况下,甚至可能有第四个,以区分特定监视器和整个桌面。不同的窗口系统也可能争论哪个部分算作客户区域,但主要的是它与其他部分不同。

找出代码中每种情况下的坐标,然后查找如何在它们之间进行转换。


0
投票

事实上之后尝试了许多不同的方法来获得它。我已经解开了这个谜团:)这很容易,但那里没有那么多的信息,而且英语不是我的母语,我尝试搜索的方式可能效率不高。但我觉得它很完美。这是工作代码

Private Sub htmldoc_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles htmldoc.MouseDown

    xmouse = Control.MousePosition.X.ToString()
    ymouse = Control.MousePosition.Y.ToString()

    TextBox5.Text = xmouse
    TextBox6.Text = ymouse
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.