Как я могу симулировать щелчок мышью в определенной позиции на экране? - PullRequest
41 голосов
/ 25 ноября 2011

Что я хочу сделать, это манипулировать мышью.Это будет простой макрос для моих собственных целей.Так что он переместит мою мышь в определенную позицию на экране и щелкнет, как я щелкаю с определенным интервалом.

Ответы [ 2 ]

52 голосов
/ 25 ноября 2011

Вот код, который использует неуправляемые функции для имитации щелчков мыши:

//This is a replacement for Cursor.Position in WinForms
[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);
}

Чтобы удерживать мышь нажатой в течение определенного времени, вы можете Sleep() поток, выполняющий эту функцию, например:

mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
System.Threading.Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);

Приведенный выше код будет держать мышь нажатой в течение 1 секунды, если пользователь не нажмет на отпускание кнопки мыши. Кроме того, убедитесь, что этот код не выполняется в основном потоке пользовательского интерфейса, так как это приведет к зависанию .

7 голосов
/ 25 ноября 2011

Вы можете перемещаться по позиции XY.Пример ниже:

windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)

Чтобы щелкнуть, вы можете использовать следующий код:

using System.Runtime.InteropServices;

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,             uint dwExtraInf);
private void btnSet_Click(object sender, EventArgs e)
    {
        int x = Convert.ToInt16(txtX.Text);//set x position 
        int y = Convert.ToInt16(txtY.Text);//set y position 
        Cursor.Position = new Point(x, y);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//make left button down
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//make left button up
    }

Кредит JOHNYKUTTY

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...