MoveMouse [SRC]

Iniciado por Sanlegas, 4 Octubre 2011, 09:36 AM

0 Miembros y 1 Visitante están viendo este tema.

Sanlegas

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 (vb) [Seleccionar]
Option Explicit

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Function MoveMouse(ByVal FinalX As Long, ByVal FinalY As Long, _
Optional ByVal InitialX As Long = -1, Optional ByVal InitialY As Long = -1, Optional ByVal TimeToWait As Long = 5) As Boolean
On Error GoTo err

Dim PosActual           As POINTAPI
Dim I                   As Long
Dim DX                  As Long
Dim DY                  As Long
Dim P                   As Double
Dim StepVal             As Integer

            GetCursorPos PosActual

            If InitialX = -1 Then InitialX = PosActual.X
            If InitialY = -1 Then InitialY = PosActual.Y
           
            DX = (FinalX - InitialX)
            DY = (FinalY - InitialY)
           
            P = (DY / DX)

            If (DX < 0) Then StepVal = -1 Else StepVal = 1
           
            For I = 1 To DX Step StepVal
                SetCursorPos InitialX + I, InitialY + Round((I * P))
                Sleep TimeToWait
            Next

            MoveMouse = True
Exit Function
err:
End Function


Ejemplo de uso:
Código (vb) [Seleccionar]
MoveMouse Screen.Width / Screen.TwipsPerPixelX, Screen.Height / Screen.TwipsPerPixelY, 0, 0



Salu2!!

LordByte64

Gracias, lo miraré más tarde cuando esté en casa  :D
~ LordByte64

Elemental Code

en la funcion pide los datos en una pointapi
me parece que seria mas comodo ::)

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Sanlegas

Cita de: Elemental Code en  5 Octubre 2011, 11:27 AM
en la funcion pide los datos en una pointapi
me parece que seria mas comodo ::)

Ok, gracias por el punto.


Salu2!  :D

BlackZeroX

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!¡.
The Dark Shadow is my passion.

Sanlegas

Cita de: BlackZeroX▓▓▒▒░░ en  6 Octubre 2011, 08:38 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 !