2011-03-02 25 views
13

Me gustaría simular eventos de mouse con la API Win32; ¿Cómo puedo hacerlo?¿Cómo puedo simular los eventos del mouse desde el código?

Lo que quiero hacer es simular el evento en el nivel más básico, el nivel en el que el sistema tiene solo el tipo de evento y las coordenadas y aún no ha calculado en qué ventana debe retransmitirlo.

No sé si así es como funcionan las cosas. De cualquier manera, necesito ayuda para hacerlo. ¿Tendría que entrometerme en el nivel del conductor?

Para aclarar mis requisitos, no quiero apuntar a ninguna ventana, solo quiero que el sistema crea que el usuario hizo clic o movió el mouse. Y yo estaría de codificación en C

Respuesta

21

Usted está buscando el SendInput function, que le permite sintetizar ratón movimientos y clics de botón en su código mediante la especificación de un conjunto de INPUT structures correspondiente a eventos de entrada.

UINT WINAPI SendInput(
    __in UINT nInputs,  // number of structures in the pInputs array 
    __in LPINPUT pInputs, // an array of INPUT structures, representing an event 
    __in int cbSize  // the size, in bytes, of an INPUT structure 
); 

Nótese, sin embargo, que esta función está sujeto a User Interface Privilege Isolation (UIPI), lo que significa que su aplicación sólo está permitido para inyectar de entrada a las aplicaciones que se ejecutan en un nivel igual o menor integridad.

+0

gracias por mencionar el 'integridad level' dando mis derechos de administrador de aplicaciones que resuelven un problema para mí :) – Micka

5

Use mouse_event (winuser.h). El siguiente código moverá el mouse y luego realizará un clic en la nueva ubicación. Puedes hacer esto en dos líneas, pero esto es más detallado.

Tenga en cuenta que X e Y se especifican en mickeys, 0 a 65535. Esto se correlaciona con la resolución actual, es decir, 0,0 será la esquina superior izquierda y 65535,65535 será la esquina inferior derecha.

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
+3

De acuerdo con [documentos de MSDN] (http://msdn.microsoft.com/en-us/library/ ms646260.aspx), mouse_event ha sido reemplazado por SendInput. Recomiendan usar SendInput en su lugar. –

Cuestiones relacionadas