Para empezar me encontré con este código en http://swigartconsulting.blogs.com/tech_blender/2005/08/how_to_move_the.html:Mover el cursor del ratón mediante programación
public class Win32
{
[DllImport("User32.Dll")]
public static extern long SetCursorPos(int x, int y);
[DllImport("User32.Dll")]
public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int x;
public int y;
}
}
Pegue el código siguiente en el botón de clic eventhandler:
Win32.POINT p = new Win32.POINT();
p.x = button1.Left + (button1.Width/2);
p.y = button1.Top + (button1.Height/2);
Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);
Esto moverá el puntero del ratón al centro del botón.
Este código funciona muy bien, pero parece que no puedo entender cómo extenderlo un poco. Digamos que tengo un explorador de Internet (incrustado en un formulario de Windows) abierto a una página web (alguna página al azar que no conozco de antemano) con un cuadro de lista desplegable. Modifiqué el código anterior para mover el cursor y hacer que aparezca el cuadro de lista desplegable (usando el método de clic del ratón que se muestra a continuación para soltar la lista), y también mover hacia arriba y hacia abajo la lista resaltando cada elemento como el puntero del mouse pasa de largo, pero por mi vida no puedo imaginar cómo hacer que el mouse haga clic en el elemento actualmente seleccionado para mantener la selección. La forma en que lo estoy haciendo ahora, el cuadro de lista desplegable simplemente se cierra y la selección no cambia. Estoy usando el siguiente código para el clic del ratón (que se pone a la lista desplegable):
private static void MouseClick(int x, int y, IntPtr handle) //handle for the browser window
{
IntPtr lParam = (IntPtr)((y << 16) | x); // The coordinates
IntPtr wParam = IntPtr.Zero; // Additional parameters for the click (e.g. Ctrl)
const uint downCode = 0x201; // Left click down code
const uint upCode = 0x202; // Left click up code
SendMessage(handle, downCode, wParam, lParam); // Mouse button down
SendMessage(handle, upCode, wParam, lParam); // Mouse button up
}
Estoy seguro de que me falta algo sencillo aquí, pero para la vida de mí no puedo entender lo que es. Gracias de antemano a todos.
Bob
SendInput fijado este problema y muchos otros que estaba teniendo. Gracias por ayudarme a resolver esto. Bob – Beaker
¡Impresionante! Gracias :) Estaba a punto de hacer la misma pregunta. – hasen
@michael Deseo gestionar los eventos de desplazamiento y desplazamiento, ¿cómo puedo hacer eso? – Faizan