Teniendo este código :
Public Class Form1
Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, ByVal dwExtraInfo As Long)
Private Const mouseclickup = 4
Private Const mouseclickdown = 2
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
'En el Timer1 ponemos:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Windows.Forms.Cursor.Position = New Point(Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y)
Timer1.Interval = NumericUpDown1.Value
Label1.Text = Windows.Forms.Cursor.Position.X
Label2.Text = Windows.Forms.Cursor.Position.Y
Windows.Forms.Cursor.Position = New Point(TextBox1.Text, TextBox2.Text)
mouse_event(mouseclickdown, 0, 0, 0, 0)
mouse_event(mouseclickup, 0, 0, 0, 0)
Windows.Forms.Cursor.Position = New Point(Label1.Text, Label2.Text)
End Sub
'En el Timer2 ponemos:
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Dim hotkey As Boolean
hotkey = GetAsyncKeyState(Keys.F9)
If hotkey = True Then timer1.start()
Dim hotkey1 As Boolean
hotkey1 = GetAsyncKeyState(Keys.F10)
If hotkey1 = True Then Timer1.Stop()
End Sub
'En el Timer3 ponemos:
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
Dim Posicion As Boolean
Posicion = GetAsyncKeyState(Keys.F7)
If Posicion = True Then
TextBox1.Text = MousePosition.X : TextBox2.Text = MousePosition.Y
End If
If Posicion = False Then
End if
End Sub
End Class
En este código para transformarlo en picosegundos es poniendo este codigo (segun me han dicho) : Imports System.Timers
Dim nPicoSeg As Integer = 5
Dim tim1 As Timer = New Timer(nPicoSeg * 10 ^ (-9))
El problema de todo esto es que no sé en que lugar del codigo se coloca .
(Tengo un pc en terahercios)
usa etquetas GeSHi para que el codigo se vea bien, están arriba de los emoticonos a la derecha...
por otro lado...
1seg = 1.000 miliSec = 1.000.000 microSeg = 1.000.000.000 picoSeg
ya microsegundos es difícil de manejar porque son poco precisos debido a los procesos del SO, dudo que el SO te devuelva pico, ya que literalmente con un procesador de 2Ghz seria 1 de cada 2 procesos y la comprobación de si el contador terminó, si hubo ingreso de datos (teclado, mouse, red, etc), generación de eventos, renderizacion de pantalla, otros programas en el SO, etc... debe estar por el orden de las miles de operaciones seguidas cada vez, a demás tu le ingresas al pc clicks en orden de microsegundos (millones por segundo) y se pega el pc o el programa...
En ese caso le pondré milisegundos pero dime una cosa . ¿En que parte del código lo pongo? , ¿Cuál sería el código en milisegundo?
para milisegundos en la cabecera colocas el api de getTickCount (te lo explicaré para vb6 como lo conozco XD corrigelo tu para .net porque no estoy seguro)
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
la cosa es que esa funcion te devuelve un tiempo en milisegundos... tu vas a hacer una espera con eso y seria un
Private Sub esperar(espera as long)
Dim inicio as long
Dim fin as long
inicio = GetTickCount()
fin = inicio + espera 'espera es el tiempo del contador en milisec
While fin > GetTickCount
DoEvents
Wend
end sub
el lo que hará es que tu lo llamas con una cantidad de tiempo en milisegundos... y el literalmente dejará el programa "pegado" en ese ciclo ese tiempo...
Compañero ,todo eso donde lo pongo . ¿En Form1 , timer1 ?
Si vas a a programar algo por lo menos aprende lo minimo del lenguaje -.- es una funcion independiente
Estoy empezando y esto no lo manejo lo suficiente bien ¿Sabrias decirmelo?
Es una funcion independiente va afuera... no va dentro de nadie
Ok , yo al poner ese código me sale un error que dice : Error 1 La instrucción no es válida en un espacio de nombres.
Y me subraya Private Sub esperar(ByVal espera As Long)
El codigo quedaria así :
Public Class Form1
Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, ByVal dwExtraInfo As Long)
Private Const mouseclickup = 4
Private Const mouseclickdown = 2
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Start()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer1.Stop()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Windows.Forms.Cursor.Position = New Point(TextBox1.Text, TextBox2.Text)
mouse_event(mouseclickdown, 3, 7, 1, 2)
mouse_event(mouseclickup, 2, 5, 9, 3)
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Dim hotkey As Boolean
hotkey = GetAsyncKeyState(Keys.F3)
If hotkey = True Then Timer1.Start()
Dim hotkey1 As Boolean
hotkey1 = GetAsyncKeyState(Keys.F4)
If hotkey1 = True Then Timer1.Stop()
End Sub
Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick, Timer4.Tick
Label1.Text = Cursor.Position.X
Label2.Text = Cursor.Position.Y
End Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
Timer1.Interval = (1)
End Sub
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
Timer1.Interval = NumericUpDown1.Value
End Sub
Private Sub NumericUpDown2_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown2.ValueChanged
Timer1.Interval = NumericUpDown2.Value
End Sub
End Class
Private Sub esperar(ByVal espera As Long)
Dim inicio As Long
Dim fin As Long
inicio = GetTickCount()
fin = inicio + espera 'espera es el tiempo del contador en milisec
While fin > GetTickCount
DoEvents()
End While
End Sub
Se ve perfectamente que no entiendes para nada en lenguaje, ya que no sabes donde se coloca nada, como donde colocar la importación de librerías, la declaración de las clases, la declaración de variables, etc. Así es que lo que te recomendaría, si necesitas un autoclick, que te descargues uno hecho ya (el ejecutable) y lo uses, y si lo que quieres es aprender el lenguaje, creo que esto no es un buen comienzo, sino que empieces por aprender las bases del lenguaje en si.
Un saludo! ;)
Por cierto, con respecto a lo último que preguntas, como puedes ver no has colocado el método esperar dentro de ninguna clase, ya que justamente una linea antes de la declaración de ese método estás cerrando tu clase Form1 (con End Class), por lo que ese método tendrás que colocarlo justo antes de "End Class". Pero vamos, el método esperar tampoco lo usas en ningún sitio xdd
Y por cierto, engelx, en cuanto a la velocidad del autoclick, supongo que le bastará con cambiarle el interval al propio timer, no? puesto que en su código está utilizando un Timer :)
[MOD]: No hagas doble post.
Respondiendo a tu pregunta del timer ...no es posible usar picosegundos, lee y comprenderás la razón ~> http://msdn.microsoft.com/en-us/library/system.timers.timer.interval%28v=vs.110%29.aspx
Saludos!