Направляя события мыши [атрибута DllImport("user32 определяет.dll")] щелчок, двойной щелчок
Я попытался [Атрибута DllImport("user32 определяет.файл DLL")] static extern bool SetCursorPos (int X, int Y);
и он отлично работает, чтобы переместить курсор в нужную точку. Я никогда не пробовал такой импорт DLL раньше, но он работает :). Но я хочу больше что еще я могу извлечь? В основном я хочу сделать двойной щелчок, щелчок или использовать параметры колеса без ввода мыши, просто код, как я могу это сделать? и как я могу проверить, что еще входит в user32dll?
Thanx
3 ответов
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
private const uint MOUSEEVENTF_LEFTDOWN = 0x02;
private const uint MOUSEEVENTF_LEFTUP = 0x04;
private const uint MOUSEEVENTF_RIGHTDOWN = 0x08;
private const uint MOUSEEVENTF_RIGHTUP = 0x10;
вы должны импортировать и определить эти константы для работы с мышью с помощью Win32API
используйте метод ниже, чтобы сделать операцию мыши
void sendMouseRightclick(Point p)
{
mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
}
void sendMouseDoubleClick(Point p)
{
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0);
Thread.Sleep(150);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0);
}
void sendMouseRightDoubleClick(Point p)
{
mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
Thread.Sleep(150);
mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
}
void sendMouseDown()
{
mouse_event(MOUSEEVENTF_LEFTDOWN, 50, 50, 0, 0);
}
void sendMouseUp()
{
mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, 0);
}
Если вы хотите сделать перетаскивание мыши, вы должны сначала отправить MouseDown (щелчок мыши) и держать его нажатой при изменении положения Мыши, чем отправить MouseUp(Release Click) что-то вроде этого .
sendMouseDown();
Cursor.Position = new Point(30,30);
sendMouseUp();
использование длинного типа вызывает ошибку "PInvoke".
мы должны использовать тип int:
[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);
}
источник:http://www.pinvoke.net/default.aspx/user32.mouse_event
посмотри pinvoke.net Список доступных API. Включены примеры кода и инструкции import. Вы также можете развернуть выбор слева, чтобы увидеть доступные API для каждой библиотеки DLL.