Simular un Click izquierdo con el Mouse

220 views
Skip to first unread message

integral

unread,
Apr 13, 2026, 12:11:56 AMApr 13
to Comunidad de Visual Foxpro en Español

Que tal amigos del -foro

Muy Buenas Noches

Utilizo el siguiente codigo

   WAIT WINDOW "Presione la Tecla [ESC] Para Cerrar el Formulario" NOCLEAR 

Deseo luego simular un Click Izquierdo, utilizo uno del os siguientes códigos pero No funcionan en la simulacion.

  MOUSE CLICK AT 10, 20
  KEYBOARD '{F11}'

Algún colega que me apoye con la solución a este impase.

Agradezco sus comentarios y sugerencias.

Saludos,

Integral

      
ENDIF

 
ENDIF 

Zarlu

unread,
Apr 13, 2026, 10:39:50 AMApr 13
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

Usando el mismo comando primero ubica el cursor en la posición y seguidamente aplica el CLICK
(Dado el caso, para mejores resultados considera aplicar los parámetros WINDOW y PIXELS del mismo comando)

Suerte
zarlu
Chetumal, Quintana Roo

integral

unread,
Apr 14, 2026, 10:33:03 AMApr 14
to Comunidad de Visual Foxpro en Español
Que tal amigos del Foro

Muy Buenos Días

Buscando información encontré la siguiente rutina

Simular clic del ratón: VISUAL BASIC

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 Declare Function SetCursorPos Lib "user32" (ByVal x As Long, _
    ByVal y As Long) As Long

Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4

Private Sub Form_Load()
    Timer1.Interval = 1000 ' un segundo
End Sub

Public Sub MouseClick(x As Long, y As Long)
    SetCursorPos x, y
    mouse_event MOUSEEVENTF_LEFTDOWN, x, y, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, x, y, 0, 0
End Sub

Algún colega que programe y conozca Visual Basic...

Pueda convertir la rutina a Visual Foxpro

Agradezco vuestra ayuda.

Saludos,

Integral

Jose Antonio Blasco

unread,
Apr 14, 2026, 11:25:04 AMApr 14
to publice...@googlegroups.com
Pero, estás dentro de un formulario, quieres simular el click sobre un boton u objeto, ¿qué exactamente?

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2



--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/08f7a1e6-4d62-40d3-a8d0-273402b7ac91n%40googlegroups.com.

Wagner Cevallos

unread,
Apr 14, 2026, 12:29:29 PMApr 14
to publice...@googlegroups.com
* --- Declaraciones de la API de Windows ---
DECLARE Sub mouse_event IN user32 ;
    INTEGER dwFlags, ;
    INTEGER dx, ;
    INTEGER dy, ;
    INTEGER cButtons, ;
    INTEGER dwExtraInfo

DECLARE INTEGER SetCursorPos IN user32 ;
    INTEGER x, ;
    INTEGER y

* --- Definición de Constantes ---
#DEFINE MOUSEEVENTF_LEFTDOWN 0x0002
#DEFINE MOUSEEVENTF_LEFTUP   0x0004

* --- Configuración del Timer (Equivalente a Form_Load) ---
* Si usas un objeto Timer en el formulario:
* ThisForm.Timer1.Interval = 1000

* --- Procedimiento MouseClick ---
PROCEDURE MouseClick(tnX, tnY)
    * Mover el cursor a la posición deseada
    SetCursorPos(tnX, tnY)
   
    * Simular el clic izquierdo (Presionar y Soltar)
    mouse_event(MOUSEEVENTF_LEFTDOWN, tnX, tnY, 0, 0)
    mouse_event(MOUSEEVENTF_LEFTUP, tnX, tnY, 0, 0)
ENDPROC

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver este debate, visita https://groups.google.com/d/msgid/publicesvfoxpro/08f7a1e6-4d62-40d3-a8d0-273402b7ac91n%40googlegroups.com.


--
Ing. Wagner Javier Cevallos  Macías
0985303564-0996496512
Portoviejo-Manabí-Ecuador

integral

unread,
Apr 14, 2026, 3:15:59 PMApr 14
to Comunidad de Visual Foxpro en Español
Que tal amigo José Antonio

Muy Buenas Tardes

Como podéis apreciar en la imagen adjunta, al presionar las teclas ALT+D llama a un formulario secundario pero antes aparece una pregunta con 2 respuestas
SI o NO.

Si es SI previamente el sistema selecciona la opción correcta a ingresar. dicho código se encuentra en el Activate del PagaFrame de 5 pestañas. 
Si elige NO deberá cerrar el formulario con la Tecla ESC o el evento QueryUnload.
En la prueba de ensayo descubri que al dar un Click izquierdo o Derecho aparece el formulario secundario y luego puedo cerrar el formulario de las 2 formas mencionadas. De lo contrario el formulario NO aparece. Esto va acompañado de un WAIT WINDOW ...... NOCLEAR. Para que se pueda ver el mensaje y no desaparezca sino al termino del proceso.

Form_Transfer.jpg

Agradezco tus comentarios y sugerencias...

Atte.,

Integral

integral

unread,
Apr 14, 2026, 3:21:22 PMApr 14
to Comunidad de Visual Foxpro en Español

Ing. Cevallos

Muy Buenas Tardes

Gracias por compartir la conversión. Pensé que nadie me iba a ayudar en la conversión. Y se me ocurrió utilizar la inteligencia artificial...

Aquí la respuesta obtenida muy similar a lo expuesto por Usted.

* Convertido a VISUAL FOXPRO

* 1. Declaración de las Funciones de la API de Windows

DECLARE mouse_event IN user32 ;                                              <----   Aqui una pequeña diferencia

    INTEGER dwFlags, INTEGER dx, INTEGER dy, ;
    INTEGER cButtons, INTEGER dwExtraInfo

DECLARE INTEGER SetCursorPos IN user32 ;
    INTEGER x, INTEGER y

* 2. Definición de Constantes


#DEFINE MOUSEEVENTF_LEFTDOWN 0x0002
#DEFINE MOUSEEVENTF_LEFTUP   0x0004

* --- Ejemplo de uso (Equivalente al Form_Load / Timer) ---
* Si usas un objeto Timer en un formulario VFP, el código iría en el evento .Timer()
* Timer1.Interval = 1000

PROCEDURE MouseClick(tnX, tnY)
    * Mover el cursor a la posición deseada
    SetCursorPos(tnX, tnY)
   
    * Simular el clic (Presionar y Soltar)

    mouse_event(MOUSEEVENTF_LEFTDOWN, tnX, tnY, 0, 0)
    mouse_event(MOUSEEVENTF_LEFTUP, tnX, tnY, 0, 0)
ENDPROC

Gracias por su Apoyo

Saludos,

Integral
(Lima-Perú)

Zarlu

unread,
Apr 14, 2026, 3:57:24 PMApr 14
to Comunidad de Visual Foxpro en Español
Buenas tardes Integral!

Te paso algo de mi baúl

*ubica el puntero del mouse
DECLARE Integer SetCursorPos in WIN32API integer, integer
=SetCursorPos(568,157)
CLEAR DLLS

*hace click
#Define MOUSEEVENTF_RESET 1
#Define MOUSEEVENTF_LEFTDOWN 2
#Define MOUSEEVENTF_LEFTUP 4
#Define MOUSEEVENTF_RIGHTDOWN 8
#Define MOUSEEVENTF_RIGHTUP 16
#Define MOUSEEVENTF_MIDDLEDOWN 32
#Define MOUSEEVENTF_MIDDLEUP 64
#Define MOUSEEVENTF_MIDDLEUP_WHEEL_MOVED 128
Declare mouse_event In user32.Dll Long,Long,Long,Long,Long
*=mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,288,0)
*=mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0)
*=mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0)
=mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,288,0)
=mouse_event(MOUSEEVENTF_RIGHTUP,0,0,288,0)
RELEASE mouse_event


Suerte
zarlu
Chetumal, Quintana Roo, México

Jose Antonio Blasco

unread,
Apr 15, 2026, 2:48:28 AMApr 15
to publice...@googlegroups.com
Sólo una pregunta, por alguna razón no es posible hacer la pregunta en el primer formulario, al detectar la pulsación ALT+D, y si la respuesta es NO, ya no abrir el segundo formulario ?

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Zarlu

unread,
Apr 15, 2026, 10:24:51 AMApr 15
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

Lo que pretendes creo que posible lograrlo con las funciones nativas del zorrito.
Es importante tomar en cuenta que los clickeos (derecho o izquierdo) funcionarán si se realizan sobre un área en la que haya un control con código a ejecutar o un menú a desplegar

Suerte
zarlu
Chetumal, Quintana Roo, México


integral

unread,
Apr 16, 2026, 1:04:19 AMApr 16
to Comunidad de Visual Foxpro en Español
Que tal amigos del Foro

Buenas Noches

Ahora intento cerrar el formulario con la siguiente rutina en el evento Keypress del formulario indicando su nombre y me marca error...

LPARAMETERS nKeyCode, nShiftAltCtrl
LOCAL loForm

DO CASE
   CASE nKeyCode = 27                                                                                           && Tecla ESC
     Wait Window "Presiono la Tecla <ESC>, Cerrando la Ventana." NOWAIT
     FOR EACH loForm IN _SCREEN.Forms
         IF ALLTRIM(UPPER(loForm.Name)) == "FRM_RENE"
            loForm.Release()
            RETURN
        ENDIF
     ENDFOR
ENDCASE

ERROR_AL_CERRAR_ESC.png

Algún colega que tuvo el mismo problema y conoce la solución y pueda compartirlo.

PD : Lo mismo sucede si utilizo el evento QueryUnload

Atte.,

Integral

Mik

unread,
Apr 16, 2026, 9:49:35 AMApr 16
to Comunidad de Visual Foxpro en Español
Prueba con

SET ESCAPE OFF

Zarlu

unread,
Apr 16, 2026, 10:45:13 AMApr 16
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

Con algo así debe bastar
If LastKey()=27 && esc
Thisform.Release
Endif

Más el SET ESCAPE OFF que te han comentado

Suerte
zarlu
Chetumal, Quintana Roo, México
Reply all
Reply to author
Forward
0 new messages