模拟鼠标指针单击(可以移动但无法单击)

时间:2014-09-26 05:49:43

标签: c# mouseevent

我试图在屏幕上的某个位置模拟鼠标左键点击(并双击)。

我有以下代码:

[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;

//This simulates a left mouse click
public static void LeftMouseClick(int xpos, int ypos)
{
     SetCursorPos(xpos, ypos);
     mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
     mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
}

我可以使用上面的代码将鼠标指针移动到坐标,但我无法使点击发生(或双击)。

1 个答案:

答案 0 :(得分:2)

我认为你有错误的常量。取自pinvoke.net:

[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

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

[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);

public static void LeftClick(int x, int y)
{
    SetCursorPos(x, y);
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}