Simular un clic sin hacer clic

es posible simular Click en un proceso sin hacer clic en él?

por ejemplo, quiero Click en una calculadora en ejecución con el mouse quieto. ¿es posible?

preguntado el 27 de julio de 12 a las 15:07

¿En qué idioma estás buscando hacer esto? etiquetó winapi y C, C++ o C# son todos candidatos válidos. Además, ¿qué estás buscando para hacer clic? ¿un botón? una coordenada especifica? -

no importa cualquiera de ellos está bien :) pero prefiero C#, C++ y Python. -

@MBZ Bueno, mejor mira aquí entonces: stackoverflow.com/questions/2416748/… -

Utilice las interfaces de automatización. Para eso están. -

1 Respuestas

Si solo está tratando de hacer clic en un botón dentro de una aplicación de etiquetas, campos y botones bastante típica, puede usar un poco de P/Invoke para usar FindWindow y SendMessage al control.

Si aún no está familiarizado con Spy ++, ¡ahora es el momento de comenzar!

Está empaquetado con Visual Studio 2012 RC en: C:\Program Files\Microsoft Visual Studio 11.0\Common7\Tools. Debería encontrarse de manera similar para otras versiones.

Pruebe esto como aplicación de Consola C#:

class Program
{
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam);

    private const uint BM_CLICK = 0x00F5;

    static void Main(string[] args)
    {
        // Get the handle of the window
        var windowHandle = FindWindow((string)null, "Form1");

        // Get button handle
        var buttonHandle = FindWindowEx(windowHandle, IntPtr.Zero, (string)null, "A Huge Button");

        // Send click to the button
        SendMessage(buttonHandle, BM_CLICK, 0, 0); 
    }
}

Esto obtiene el identificador de la ventana con el título "Form1". Usando ese identificador, obtiene un identificador para el Botón dentro de la Ventana. Luego envía un mensaje de tipo "BM_CLICK" sin parámetros útiles para el control del botón.

Usé una aplicación de prueba WinForms como mi objetivo. Un solo botón y algún código detrás para incrementar un contador.

Una aplicación de prueba de WinForms

Debería ver el incremento del contador cuando ejecuta la aplicación de consola P/Invoke. Sin embargo, lo harás no ver el botón animar.

También puede utilizar la función Registrador de mensajes de Spy++. Recomiendo un filtro a BM_CLICK y tal vez WM_LBUTTONDOWN/WM_LBUTTONUP (lo que te dará un clic manual).

Espero que ayude!

Respondido 27 Jul 12, 16:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.