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
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:
MoveMouse Screen.Width / Screen.TwipsPerPixelX, Screen.Height / Screen.TwipsPerPixelY, 0, 0
Salu2!!
Gracias, lo miraré más tarde cuando esté en casa :D
en la funcion pide los datos en una pointapi
me parece que seria mas comodo ::)
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
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!¡.
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 !