Как мне нажать и переместить мышь в C #? - PullRequest
2 голосов
/ 25 февраля 2010

Мне нужно отправить сигналы мыши в C #, чтобы другие приложения регистрировали их. Чтобы быть точным, мне нужно смоделировать кнопки мыши и движение мыши. Есть ли способ сделать это в C #? (Windows)

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Вам необходимо вызвать функцию API SendInput.

См. здесь для определения P / Invoke.

3 голосов
/ 25 февраля 2010

Положение курсора мыши является настраиваемым свойством - вы можете использовать его для перемещения мыши куда хотите.

1 голос
/ 25 февраля 2010

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

[DllImport("user32.dll")]
    public static extern uint SendInput(uint nInputs, ref Input pInputs, int cbSize);

    const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
    const uint MOUSEEVENTF_LEFTUP = 0x0004;
    const uint MOUSEEVENTF_RIGHTDOWN = 0x0008;
    const uint MOUSEEVENTF_RIGHTUP = 0x0010;

    public static void DoMouseClick()
    {
        var input =
            new Input
                {
                    type = 0,
                    mouseinput =
                        new Mouseinput
                            {
                                dx = Cursor.Position.X,
                                dy = Cursor.Position.Y,
                                dwFlags = MOUSEEVENTF_LEFTDOWN
                            }
                };


        SendInput(1, ref input, 28);
    }

    [StructLayout(LayoutKind.Explicit, Size = 28)]
    public struct Input
    {
        [FieldOffset(0)]
        public uint type;
        [FieldOffset(4)]
        public Mouseinput mouseinput;
    };
    [StructLayout(LayoutKind.Explicit, Size = 28)]
    public struct Mouseinput
    {
        [FieldOffset(0)]
        public int dx;
        [FieldOffset(4)]
        public int dy;
        [FieldOffset(8)]
        public uint mouseData;
        [FieldOffset(12)]
        public uint dwFlags;
        [FieldOffset(16)]
        public uint time;
        [FieldOffset(20)]
        public uint dwExtraInfo;
    }
...