Подтвердить что ты не робот

Переместите мышь в положение и щелкните левой кнопкой мыши

Я работаю над 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).

И я действительно не понимаю, в чем проблема... Вы, ребята, знаете, в чем проблема? или вы знаете лучший способ сделать то, что я пытаюсь сделать?

4b9b3361

Ответ 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)]