Autor
|
Tema: Clickeador (Leído 6,068 veces)
|
45m0d3u5
Desconectado
Mensajes: 8
|
Hola estimados(as):
Desde hace algun tiempo ando buscando alguna guia para realizar un programa que haga clicks de forma automatica. La idea sería poder setear las coordenadas en las que haga los clicks y poner un timer o algo asi para definir cuando debe hacer click. Me han dicho que en vb se puede hacer... alguien me podría dar una mano? alguna idea ... Gracias de antemano
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Hola, fijate si te puede servir este ejemplo: Option Explicit
Private Declare Function FindWindow _ Lib "USER32" _ Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx _ Lib "USER32" _ Alias "FindWindowExA" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long
Private Declare Function PostMessage _ Lib "USER32" _ Alias "PostMessageA" _ (ByVal Hwnd As Long, _ ByVal wMsg As Long, _ ByVal wparam As Long, _ ByVal lparam As Long) As Long
Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202 Private Const WM_RBUTTONDOWN = &H204 Private Const WM_RBUTTONUP = &H205
Private Declare Function GetWindowRect Lib "USER32" _ (ByVal Hwnd As Long, lpRect As RECT) As Long
Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type
Private Declare Function SetCursorPos Lib "USER32" _ (ByVal X As Long, ByVal Y As Long) As Long
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 MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4 Private Const MOUSEEVENTF_RIGHTDOWN = &H8 Private Const MOUSEEVENTF_RIGHTUP = &H10
Dim Hndl As String _
Private Sub Command1_Click()
Timer1.Enabled = False
Shell "notepad", vbNormalFocus
Clipboard.Clear Clipboard.SetText "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Hndl = FindWindow("notepad", vbNullString) Hndl = FindWindowEx(Hndl, 0, "edit", vbNullString)
Call PostMessage(Hndl, WM_RBUTTONDOWN, 0, 0) Call PostMessage(Hndl, WM_RBUTTONUP, 0, 0)
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Hndl = FindWindow("#32768", vbNullString)
If Hndl <> 0 Then
Dim TR As RECT Call GetWindowRect(Hndl, TR)
Me.Cls Me.Print TR.Right - TR.Left & " " & TR.Bottom - TR.Top ' tamaño de la ventana Me.Print TR.Left & " " & TR.Top ' posic x-y de la ventana
Me.Print _ TR.Left + (TR.Right - TR.Left) * 50 / 100 _ & " " & _ TR.Top + (TR.Bottom - TR.Top) * 50 / 100
SetCursorPos TR.Left + (TR.Right - TR.Left) * 50 / 100, _ TR.Top + (TR.Bottom - TR.Top) * 55 / 100
Dim PosX As Long: Dim PosY As Long Call mouse_event(MOUSEEVENTF_RIGHTDOWN, PosX, PosY, 0, 0) Call mouse_event(MOUSEEVENTF_RIGHTUP, PosX, PosY, 0, 0)
Timer1.Enabled = False
End If
End Sub
PD: Siempre que se pueda (a veces no es posible) ,es mejor llegar al evento por Handlle (como en Command1) y no por posicion (como en Timer1), saludos EDIT: Me olvide del Load Private Sub Form_Load()
Timer1.Enabled = False Timer1.Interval = 100 Command1.Caption = "Click"
End Sub
|
|
« Última modificación: 11 Noviembre 2008, 21:26 pm por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
45m0d3u5
Desconectado
Mensajes: 8
|
Muchas gracias ... voy a revisar
|
|
|
En línea
|
|
|
|
seba123neo
|
Hola, por ejemplo con esto haces click cada 3 segundos en la coordenada indicada... Option Explicit Private Declare Function SetCursorPos Lib "USER32" (ByVal X As Long, ByVal Y As Long) As Long 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 MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4 Private Sub Timer1_Timer() SetCursorPos 50, 800 Call MouseLeftClick(50, 800) End Sub Public Sub MouseLeftClick(ByVal PosX As Long, ByVal PosY As Long) Call mouse_event(MOUSEEVENTF_LEFTDOWN, PosX, PosY, 0, 0) Call mouse_event(MOUSEEVENTF_LEFTUP, PosX, PosY, 0, 0) End Sub Private Sub Form_Load() Timer1.Interval = 3000 End Sub
saludos.
|
|
|
En línea
|
|
|
|
45m0d3u5
Desconectado
Mensajes: 8
|
muchas gracias suena bien voy a revisar también
|
|
|
En línea
|
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Estan bien los codigos, voy a tomar uno para portarlo a C.
Cual es el proposito que tienen ustedes para los click ? Publicidad $$$ ?
|
|
|
En línea
|
|
|
|
s E t H
Desconectado
Mensajes: 152
Ha tenido un sueño donde todos los pollos eran libres de cruzar una carretera sin tener que justificar sus actos.
|
yo le veo mas utilidad en juegos, para publicidad podes simular que visitas los links sin necesidad de hacerlo realmente y ocupar el mouse
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
para publicidad podes simular que visitas los links sin necesidad de hacerlo realmente y ocupar el mouse
A claro el metodo lo conozco, por eso yo preguntaba que para que eran lo de los click, y ahora que lo dices, lo de los juegos no esta nada mal. Saludos.
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Un poco mas de code GetCursorPos (para conocer la ubicacion del puntero) y SetCursorPos ( para colocar el puntero en la posición x,y) Option Explicit
Private Declare Function GetCursorPos Lib "user32" _ (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" _ (ByVal X As Long, ByVal Y As Long) As Long
Private Type POINTAPI X As Long Y As Long End Type
Private Sub Form_Load()
Timer1.Interval = 30
Command1.Caption = "SetCursorPos"
End Sub
Private Sub Command1_Click() Dim X1 As Long Dim Y1 As Long X1 = (Screen.Width / Screen.TwipsPerPixelX) / 2 Y1 = (Screen.Height / Screen.TwipsPerPixelY) / 2
SetCursorPos X1, Y1 ' Coloca el puntero en la posición x,y
End Sub
Private Sub Timer1_Timer() Dim Point As POINTAPI GetCursorPos Point ' Obtiene la posición actual del cursos en coordenandas x,y Me.Cls Me.Print Me.Print " X: " & Point.X ' Muestra el valor actual de X en pixels Me.Print " X: " & Point.X * Screen.TwipsPerPixelX ' Muestra X twips Me.Print Me.Print " Y: " & Point.Y ' Muestra el valor actual de Y en pixels Me.Print " Y: " & Point.Y * Screen.TwipsPerPixelY ' Muestra Y Muestra X twips SetCursorPos Point.X, Point.Y ' Coloca el puntero en la posición x,y
End Sub
PD: si el clicck es para un ventana o un control de una aplicación externa tal vez sea mas directo llagar al Hwn. saludos
|
|
|
En línea
|
Adrian Desanti
|
|
|
|
|