Hola,
Para hacer eso necesitas recurrir a funciones API de windows.
Para simular el evento del
Clic del ratón has de llamar a la siguiente función:
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)
En este caso la constante que te interesa usar es:
Const MOUSEEVENTF_LEFTDOWN = &H2 ' botón izquierdo presionado
Para llamar a
mouse_event y simular el CLIC del ratón se hace de la siguiente manera:
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Para mover el cursor, es decir el puntero del ratón se usa la siguiente función:
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Y la forma de llamarlo es:
Call SetCursorPos (X,Y)
Donde X e Y son las coordenadas en pixels del escritorio de windows. Así, si tu pantalla tiene una resolución de 1280x800 y quieres colocar el cursor justo en el centro de la pantalla pones:
Call SetCursorPos((1280/2), (800/2))
Ejemplo de programa- Crea un módulo
- Un control PictureBox
- Un control Timer
- Un control CommandButton
En el módulo pega lo siguiente:
'Definición de la API para mover el cursor
Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
'Definición de la API para los eventos del ratón
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)
Const MOUSEEVENTF_MOVE = &H1 ' movimiento del mouse
Const MOUSEEVENTF_LEFTDOWN = &H2 ' botón izquierdo presionado
Const MOUSEEVENTF_LEFTUP = &H4 ' botón izquierdo soltado
Const MOUSEEVENTF_RIGHTDOWN = &H8 ' botón derecho presionado
Const MOUSEEVENTF_RIGHTUP = &H10 ' botón derecho soltado
Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' botón central presionado
Const MOUSEEVENTF_MIDDLEUP = &H40 ' botón central soltado
Const MOUSEEVENTF_ABSOLUTE = &H8000 ' movimiento absoluto
Public Sub HacerClic()
'Simula el clic del boton izquierdo del ratón
Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
End Sub
En el Form pega lo siguiente:
'Función API para determinar la posición de un control o formulario
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Dim ColorTiza As Integer
Dim PosPicture As RECT
Dim r As Variant
Dim X As Integer, Y As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
ColorTiza = 0 'Color blanco por defecto al abrir el programa
Timer1.Interval = 200
'Obtiene el centro del PictureBox
Call GetWindowRect(Picture1.hWnd, PosPicture)
X = PosPicture.Left + ((PosPicture.Right - PosPicture.Left) / 2)
Y = PosPicture.Top + ((PosPicture.Bottom - PosPicture.Top) / 2)
'Coloca el cursor en el centro del Picture
Call SetCursorPos(X, Y)
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Picture1.PSet (X, Y), QBColor(ColorTiza)
End If
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Picture1.DrawWidth = 5
Picture1.Line -(X, Y), QBColor(ColorTiza)
End If
End Sub
Private Sub Timer1_Timer()
Call GetWindowRect(Picture1.hWnd, PosPicture)
r = (r + 0.5)
X = X + Cos(Y) * r
Y = Y + Sin(X) * r
'Mueve el cursor
Call SetCursorPos(X, Y)
'Simula el evento CLIC del ratón
Call HacerClic
'Para el proceso cuando el cursor se sale del control PictureBox
If X > PosPicture.Right Or X < PosPicture.Left Then Timer1.Enabled = False
If Y > PosPicture.Bottom Or Y < PosPicture.Top Then Timer1.Enabled = False
End Sub
Saludos