2010-04-03 6 views
1

J'écris un petit programme qui peut simuler des clics de souris à des positions spécifiées. Utilisation du mouse_event d'appel API Win32 comme ceci:mouse_event L'appel WinAPI ne fonctionne pas lorsque le curseur est sur

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo); 

[Flags] 
public enum MouseEventFlags : uint 
{ 
    LEFTDOWN = 0x00000002, 
    LEFTUP = 0x00000004, 
    MIDDLEDOWN = 0x00000020, 
    MIDDLEUP = 0x00000040, 
    MOVE = 0x00000001, 
    ABSOLUTE = 0x00008000, 
    RIGHTDOWN = 0x00000008, 
    RIGHTUP = 0x00000010 
} 

mouse_event((uint)(MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP), x, y, 0, UIntPtr.Zero); 

fonctionne parfaitement bien, sauf lorsque le curseur de la souris est sur une application Flash. Flash semble ignorer le clic de souris simulé. Quelle pourrait en être la raison? Et comment puis-je le réparer?

Merci!

Répondre

1

Essayez

mouse_event((uint) 
(MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP | MouseEventFlags.ABSOLUTE), 
x, y, 0, UIntPtr.Zero); 

Aussi, pour une raison étrange, j'ai eu des problèmes avec le P/Invoke ci-dessus convention d'appel, voir Simulating a mouse button click in Windows