programadorvb6 Posted December 20, 2021 at 03:47 PM Report Share #624995 Posted December 20, 2021 at 03:47 PM Olá pessoal, boa tarde, fiz aqui um programa que indica a posição do rato e suas coordenadas na ListBox1, mas não queria usar o controlo timer, pois é muito limitado ,tentei fazer de outra maneira , mas estou com dificuldade em parar de registar as coordenadas do rato. Existe alguma solução ? Grato desde já pela vossa atenção. ProgramadorVB6 Deixo aqui até onde parei. Public Class Form1 Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer) Public Const MOUSEEVENTF_LEFTDOWN = &H2 'Prime o botão do rato esquerdo. Public Const MOUSEEVENTF_LEFTUP = &H4 'Larga o botao do rato do lado esquerdo. Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Prime o botão do rato direito. Public Const MOUSEEVENTF_RIGHTUP = &H10 'Larga o botao do rato do lado direito. Private x As ULong Private y As ULong Dim processo As String Private Sub Esperar(ByVal Segundos As Integer, Parar As Boolean) Dim Final As Date = TimeOfDay.AddSeconds(Segundos) While (Not TimeOfDay.Second = Final.Second) Application.DoEvents() Label1.Text = Cursor.Position.X Label2.Text = Cursor.Position.Y ListBox1.Items.Add(Me.Label1.Text & "," & Me.Label2.Text) If Parar = True Then Exit Sub End If End While End Sub Private Sub clicar() Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click x = Val(TextBox2.Text) y = Val(TextBox3.Text) Windows.Forms.Cursor.Position = New System.Drawing.Point(x, y) clicar() End Sub Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click Esperar(10, False) End Sub Private Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click Esperar(10, True) End Sub End Class ______________________________________________________________________________ Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé. Link to comment Share on other sites More sharing options...
Andrepereira9 Posted December 20, 2021 at 07:14 PM Report Share #624997 Posted December 20, 2021 at 07:14 PM Boas Isso acontece, porque quando tu carregas no botao para Parar, estás a iniciar um novo Sub, que termina imediatamente, quando chega ao IF... mas o primeiro de todos, nunca termina.. podes resolver de varias formas. 1º opção: Criar uma variavel externa a esse sub, e alteras o estado (True / False) quando clicas no botão Parar e no botao Gravar Public Class Form1 Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer) Public Const MOUSEEVENTF_LEFTDOWN = &H2 'Prime o botão do rato esquerdo. Public Const MOUSEEVENTF_LEFTUP = &H4 'Larga o botao do rato do lado esquerdo. Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Prime o botão do rato direito. Public Const MOUSEEVENTF_RIGHTUP = &H10 'Larga o botao do rato do lado direito. Private x As ULong Private y As ULong Dim processo As String Dim estado As Boolean Private Sub Esperar(ByVal Segundos As Integer) Dim Final As Date = TimeOfDay.AddSeconds(Segundos) While (Not TimeOfDay.Second = Final.Second) Application.DoEvents() Label1.Text = Cursor.Position.X Label2.Text = Cursor.Position.Y ListBox1.Items.Add(Me.Label1.Text & "," & Me.Label2.Text) If estado = True Then Exit Sub End If End While End Sub Private Sub clicar() Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) End Sub Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click x = Val(TextBox2.Text) y = Val(TextBox3.Text) Windows.Forms.Cursor.Position = New System.Drawing.Point(x, y) clicar() End Sub Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click estado = False Esperar(10) End Sub Private Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click estado = True End Sub End Class 2º opção: Criar uma função independente, que consoante o botão clicado, manda iniciar o sub, e altera o valor numa variavel Public Class Form1 Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer) Public Const MOUSEEVENTF_LEFTDOWN = &H2 'Prime o botão do rato esquerdo. Public Const MOUSEEVENTF_LEFTUP = &H4 'Larga o botao do rato do lado esquerdo. Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Prime o botão do rato direito. Public Const MOUSEEVENTF_RIGHTUP = &H10 'Larga o botao do rato do lado direito. Private x As ULong Private y As ULong Dim processo As String Dim estado As Boolean Private Sub inicia_para(ByVal segundos As Integer, Parar As Boolean) If Parar = False Then estado = False Esperar(segundos) Else estado = True End If End Sub Private Sub Esperar(ByVal Segundos As Integer) Dim Final As Date = TimeOfDay.AddSeconds(Segundos) While (Not TimeOfDay.Second = Final.Second) Application.DoEvents() Label1.Text = Cursor.Position.X Label2.Text = Cursor.Position.Y ListBox1.Items.Add(Me.Label1.Text & "," & Me.Label2.Text) If estado = True Then Exit Sub End If End While End Sub Private Sub clicar() Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) End Sub Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click x = Val(TextBox2.Text) y = Val(TextBox3.Text) Windows.Forms.Cursor.Position = New System.Drawing.Point(x, y) clicar() End Sub Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click inicia_para(10, False) End Sub Private Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click inicia_para(10, True) End Sub End Class A informática chegou para resolver problemas que antes não existiam Quem ri por último é porque está conectado a 52 Kbs. Link to comment Share on other sites More sharing options...
programadorvb6 Posted December 21, 2021 at 10:00 AM Author Report Share #625000 Posted December 21, 2021 at 10:00 AM (edited) Olá Bom dia, desde já quero agradecer pela tua resposta, estive a experimentar os teus códigos facultados, mas acontece que eles não param de registar as coordenadas quando premida o botão Parar, será que funciona melhor com o controle Timer1 ? Se sim como fazer ? Estive a tentar fazer com o controle e dá-me erro existe alguma maneira de usar este maldito controle Timer1.eneable = True Nota: A ideia é de fazer mexer o cursor sozinho perseguindo as coordenadas que estão na ListBox1. Grato desde já pela tua atenção. ProgramadorVB6 Edited December 21, 2021 at 01:23 PM by programadorvb6 ______________________________________________________________________________ Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé. Link to comment Share on other sites More sharing options...
Solution Andrepereira9 Posted December 22, 2021 at 02:52 PM Solution Report Share #625021 Posted December 22, 2021 at 02:52 PM Boas Adicionas um timer ao form , e alteras o codigo para isto Private Sub GravarP_Click(sender As Object, e As EventArgs) Handles GravarP.Click estado = False Timer1.Start() End Sub Private Async Sub PararCiclo_Click(sender As Object, e As EventArgs) Handles PararCiclo.Click estado = True Timer1.Stop() End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Esperar(10) End Sub Em 21/12/2021 às 10:00, programadorvb6 disse: Nota: A ideia é de fazer mexer o cursor sozinho perseguindo as coordenadas que estão na ListBox1. Mas estas a fazer o oposto... So estas a registar na Listbox1, as coordenadas do rato A informática chegou para resolver problemas que antes não existiam Quem ri por último é porque está conectado a 52 Kbs. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now