2012-07-13 2 views
0

J'utilise le code suivant de How to simulate Mouse Click in C#? et j'ai trouvé que cela ne fonctionne pas. Voici le code:Pourquoi la souris ne clique pas quand je le dis?

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 

    public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 

    public void DoMouseClick() 
    { 
     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 882, 554, 0, 0); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     DoMouseClick(); 
    } 

J'ai aussi essayé de remplacer mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENT_LEFTUP... avec mouse_event(MOUSEEVENTF_LEFTDOWN & MOUSEEVENT_LEFTUP... mais toujours pas de chance. D'autres personnes ont eu du succès avec ça ... Pourquoi je ne le suis pas?

+0

Quelle version/profondeur de bit du système d'exploitation utilisez-vous? – RQDQ

+2

MOUSEEVENTF_LEFTDOWN et MOUSEEVENTF_LEFTUP en un appel ?? –

+0

@RQDQ Windows 7 –

Répondre

5

Vous ne devez pas utiliser mouse_event(), il a été remplacé par SendInput().

Il y a une bonne raison à cela, le type de retour pour mouse_event() est void. Il n'y a aucun moyen que Windows peut vous dire que vous le faites mal. SendInput renvoie UINT et signale une erreur en retournant 0 et en exposant le code d'erreur via GetLastError.

Et vous vous trompez définitivement. Envoyer un événement de souris qui a le bouton simultanément de haut en bas n'a pas de sens. Vous devez l'appeler deux fois; en bas d'abord, en haut ensuite.

+0

Comment est-ce que j'utiliser envoyer l'entrée? –

+5

Google a 44,500 hits pour "C# sendinput", ne soyez pas sans défense. –

Questions connexes