Переместите мышь в положение и щелкните левой кнопкой мыши
Я работаю над Windows Form Application в С#, Framework 4 (32 бит).
У меня есть список, который содержит координаты мыши, и я могу их захватить. Пока все хорошо.
Но в какой-то момент я хочу пойти в эти координаты и щелкнуть левой кнопкой мыши по нему.
Вот как это выглядит прямо сейчас:
for (int i = 0; i < coordsX.Count; i++)
{
Cursor.Position = new Point(coordsX[i], coordsY[i]);
Application.DoEvents();
Clicking.SendClick();
}
И класс Clicking:
class Clicking
{
private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
private static extern void mouse_event(
UInt32 dwFlags, // motion and click options
UInt32 dx, // horizontal position or change
UInt32 dy, // vertical position or change
UInt32 dwData, // wheel movement
IntPtr dwExtraInfo // application-defined information
);
// public static void SendClick(Point location)
public static void SendClick()
{
// Cursor.Position = location;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new System.IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new System.IntPtr());
}
}
Но я получаю эту ошибку:
Could not load type 'program.Clicking' from assembly 'program, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'mouse_event' has no implementation (no RVA).
И я действительно не понимаю, в чем проблема... Вы, ребята, знаете, в чем проблема? или вы знаете лучший способ сделать то, что я пытаюсь сделать?
Ответы
Ответ 1
Включили ли вы следующую строку?
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,
UIntPtr dwExtraInfo);
Это будет импортировать функцию mouse_event
из dll user32
, которую вы пытаетесь использовать в своей программе. В настоящее время ваша программа не знает об этом методе в DLL, пока вы не укажете, откуда она взялась.
Веб-сайт PInvoke.net user32 Mouse Event весьма полезен для основ такого рода вещей.
Ответ на Управление событиями мыши [DllImport ( "user32.dll" )], щелчок, двойной щелчок также будет полезен для вашего понимания.
flags
- это команды, которые вы хотите отправить в функцию mouse_input
, в этом примере вы можете видеть, что он отправляет как mouse down
, так и mouse up
в одну строку, это нормально, потому что mouse_event
будет разделять эти флаги и выполнять их последовательно.
Также обратите внимание, что этот метод был заменен командой SendInput
, хороший пример SendInput
и SetMousePos
можно найти При этом Блог
Ответ 2
Я думаю, вам не хватает следующей строки
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]