Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Sanlegas en 4 Octubre 2011, 09:36 am



Título: MoveMouse [SRC]
Publicado por: Sanlegas en 4 Octubre 2011, 09:36 am
Bueno... estaba un poco aburrido y decidi crear esta funcion para mover el puntero arrastrandolo de una coordenada a otra, el uso... ps ustedes se lo dan  :xD

Código
  1. Option Explicit
  2.  
  3. Private Type POINTAPI
  4.    X As Long
  5.    Y As Long
  6. End Type
  7.  
  8. Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
  9. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  10. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  11.  
  12. Public Function MoveMouse(ByVal FinalX As Long, ByVal FinalY As Long, _
  13. Optional ByVal InitialX As Long = -1, Optional ByVal InitialY As Long = -1, Optional ByVal TimeToWait As Long = 5) As Boolean
  14. On Error GoTo err
  15.  
  16. Dim PosActual           As POINTAPI
  17. Dim I                   As Long
  18. Dim DX                  As Long
  19. Dim DY                  As Long
  20. Dim P                   As Double
  21. Dim StepVal             As Integer
  22.  
  23.            GetCursorPos PosActual
  24.  
  25.            If InitialX = -1 Then InitialX = PosActual.X
  26.            If InitialY = -1 Then InitialY = PosActual.Y
  27.  
  28.            DX = (FinalX - InitialX)
  29.            DY = (FinalY - InitialY)
  30.  
  31.            P = (DY / DX)
  32.  
  33.            If (DX < 0) Then StepVal = -1 Else StepVal = 1
  34.  
  35.            For I = 1 To DX Step StepVal
  36.                SetCursorPos InitialX + I, InitialY + Round((I * P))
  37.                Sleep TimeToWait
  38.            Next
  39.  
  40.            MoveMouse = True
  41. Exit Function
  42. err:
  43. End Function

Ejemplo de uso:
Código
  1. MoveMouse Screen.Width / Screen.TwipsPerPixelX, Screen.Height / Screen.TwipsPerPixelY, 0, 0
  2.  


Salu2!!


Título: Re: MoveMouse [SRC]
Publicado por: LordByte64 en 5 Octubre 2011, 10:17 am
Gracias, lo miraré más tarde cuando esté en casa  :D


Título: Re: MoveMouse [SRC]
Publicado por: Elemental Code en 5 Octubre 2011, 11:27 am
en la funcion pide los datos en una pointapi
me parece que seria mas comodo ::)


Título: Re: MoveMouse [SRC]
Publicado por: Sanlegas en 6 Octubre 2011, 06:06 am
en la funcion pide los datos en una pointapi
me parece que seria mas comodo ::)

Ok, gracias por el punto.


Salu2!  :D


Título: Re: MoveMouse [SRC]
Publicado por: BlackZeroX en 6 Octubre 2011, 08:38 am
Revisa mejor el codigo... analisalo mas a fondo a simple vista te puedo decir muchos errores logicos...

* GetCursorPos() deberia llamarse solo si se requiere...
* las variables con prefijo InitialX... imagina que meto -888...
* P = (DY / DX)  sustituye / por \ y quita la funcion Round()... y asi declara a P como long...

* Por norma la 1era palabra del nombre de una palabra es minuscula... la siguiente palabra la 1ra letra es mayuscula seguida de minusculas...

Dim iNombre as integer
y/o
Dim nombreUsuarioX as string

las constantes son completamente en mayusculas... es por ello lo que te menciono...

Dulces Lunas!ˇ.


Título: Re: MoveMouse [SRC]
Publicado por: Sanlegas en 6 Octubre 2011, 09:43 am


* GetCursorPos() deberia llamarse solo si se requiere...
* las variables con prefijo InitialX... imagina que meto -888...
* P = (DY / DX)  sustituye / por \ y quita la funcion Round()... y asi declara a P como long...


1.- Lo pensé pero por que no es un codigo que se necesite eficiencia en rapidez lo deje asi  :xD
2.- No tira error si meten numeros negativos, y si hago la comparación de que es un numero negativo tendria que compara si X o Y esta en el rango de las medidas del monitor por si estas son menores
3.- Al usar \ con la variable long se redondea antes de hacer la multiplicación de la proporcion y esto hace que se coma unos decimales y pierda el rumbo de donde deberia ir

Gracias por los datos, salu2 !