2011-09-06 4 views
2

Je n'ai pas trouvé de solution sauf déplacer le curseur par Cursor classe, en cliquant avec mouse_event puis en déplaçant le curseur vers son ancienne position. Je joue avec la fonction SendInput en ce moment mais toujours aucune chance pour une bonne solution. Aucun conseil?Effectuer un clic de souris sans déplacer le curseur

+0

Quelle saveur de .Net C#, VB ?, ASP.Net –

+0

J'ai édité les étiquettes. Merci de nous avoir rappelé. – onatm

+0

Sur quel type d'objet voulez-vous cliquer? –

Répondre

3

Voici un exemple suivant l'approche proposée par Hooch.

J'ai créé un formulaire qui contient 2 boutons. Lorsque vous cliquez sur le premier bouton, la position du second bouton est résolue (l'écran coïncide). Ensuite, une poignée pour ce bouton est récupérée. Enfin, la fonction SendMessage (...) (PInvoke) est utilisée pour envoyer un événement click sans déplacer la souris.

public partial class Form1 : Form 
{ 
    [DllImport("user32.dll")] 
    private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, 
     IntPtr wParam, IntPtr lParam); 

    [DllImport("user32.dll", EntryPoint = "WindowFromPoint", 
     CharSet = CharSet.Auto, ExactSpelling = true)] 
    public static extern IntPtr WindowFromPoint(Point point); 

    private const int BM_CLICK = 0x00F5; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // Specify the point you want to click 
     var screenPoint = this.PointToScreen(new Point(button2.Left, 
      button2.Top)); 
     // Get a handle 
     var handle = WindowFromPoint(screenPoint); 
     // Send the click message 
     if (handle != IntPtr.Zero) 
     { 
      SendMessage(handle, BM_CLICK, IntPtr.Zero, IntPtr.Zero); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("Hi", "There"); 
    } 
} 
Questions connexes