¿Como le pongo a un autoclick una velocidad de picosegundos?

Iniciado por milenio204, 25 Enero 2014, 20:00 PM

0 Miembros y 2 Visitantes están viendo este tema.

milenio204

Teniendo este código :  

Código (vbnet) [Seleccionar]
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:

Código (vbnet) [Seleccionar]
   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:

Código (vbnet) [Seleccionar]
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:

Código (vbnet) [Seleccionar]
   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) :
Código (vbnet) [Seleccionar]
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)

engel lex

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...


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

milenio204

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?

engel lex

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)

Código (vb) [Seleccionar]
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

Código (vb) [Seleccionar]

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...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

milenio204

Compañero ,todo eso donde lo pongo . ¿En Form1 , timer1 ?

engel lex

Si vas a a programar algo por lo menos aprende lo minimo del lenguaje -.- es una funcion independiente
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

milenio204

Estoy empezando y esto no lo manejo lo suficiente bien ¿Sabrias decirmelo?

engel lex

Es una funcion independiente va afuera... no va dentro de nadie
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

milenio204

#8
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í :


Código (vbnet) [Seleccionar]
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


TomaSs

#9
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.