Решение Лукаса Шалкаускаса работало для меня уже довольно давно, но сегодня оно неожиданно привело к следующей ошибке (возможно, из-за какого-то обновления .NET Центром обновления Windows?)
вызов функции PInvoke
«SampleMethod» нарушил баланс
стек. Это вероятно потому, что
управляемая подпись PInvoke не
соответствовать неуправляемой целевой подписи.
Проверьте, что соглашение о вызовах и
параметры подписи PInvoke
соответствовать целевой неуправляемой подписи.
Итак, я переключился на пример кода 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
}
public static void LeftClick(int x, int y)
{
Cursor.Position = new System.Drawing.Point(x, y);
mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}