Pour commencer, je trouve ce code à http://swigartconsulting.blogs.com/tech_blender/2005/08/how_to_move_the.html:En déplaçant le curseur de la souris programme
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;
}
}
Collez le code suivant dans un clic de eventhandler du bouton:
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);
Cela déplace le pointeur de la souris au centre du bouton.
Ce code fonctionne très bien, mais je n'arrive pas à comprendre comment l'étendre un peu. Disons que j'ai Internet Explorer (intégré dans un formulaire Windows) ouvert à une page Web (une page aléatoire, je ne sais pas à propos de la main) avec une liste déroulante en elle. J'ai modifié le code ci-dessus pour déplacer le curseur et faire dérouler la liste (en utilisant la méthode de clic de souris ci-dessous pour faire tomber la liste), et aussi monter et descendre la liste en soulignant chaque pointeur de la souris va plus loin, mais pour la vie de moi je n'arrive pas à comprendre comment réellement faire le clic de la souris sur l'élément actuellement sélectionné pour garder la sélection. La façon dont je le fais maintenant la liste déroulante se ferme juste et la sélection n'est pas modifiée. J'utilise le code suivant pour le clic de la souris (qui ne se la liste déroulante):
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
}
Je suis sûr que je manque quelque chose de simple, mais pour la vie de moi ne peux pas comprendre ce que c'est. Merci d'avance à tous.
Bob
SendInput fixe ce problème et beaucoup d'autres que je rencontrais. Merci de m'avoir aidé à résoudre ce problème. Bob – Beaker
Génial! Merci :) J'étais sur le point de poser la même question. – hasen
@michael Je veux gérer les événements de défilement et de défilement, comment faire? – Faizan