我已经开始构建一个机器人,我已经尝试将鼠标位置存储在变量x和y上,然后我点击开始将鼠标移动到该位置但是我启动机器人的位置不正确。 我怎样才能得到它的真实位置。 我试过这样但是我无法在web浏览器中获得鼠标x,y的正确位置
我已经制作了一个问题的gif图片imgur link 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
答案 0 :(得分:3)
使用图形界面进行编程时,需要注意三种不同的坐标集:屏幕,窗口和客户端。不同的上下文提供来自不同区域的坐标。您需要知道您拥有什么类型的坐标,以及如何在其他坐标之间进行转换。这张图片说明了:
在多监视器情况下,甚至可能有第四种情况,以区分特定监视器和整个桌面。不同的窗口系统也可能会争论哪个部分算作客户区域,但主要的是它与其他部分不同。
找出代码中每种情况下的坐标,然后查找如何在它们之间进行转换。
答案 1 :(得分: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