Полная эмуляция управления мышью с помощью wpf: нажмите, перетащите, введите, выйдите - PullRequest
2 голосов
/ 29 марта 2011

Я работаю над проектом, в котором мне нужно использовать джойстик (DirectInput) для управления указателем мыши внутри приложения wpf.Мне нужно иметь возможность нажимать / отпускать кнопку мыши, а также, возможно, перетаскивать по экрану.Предпочтительно это должно фактически управлять мышью, позволяя использовать джойстик для управления другими приложениями.У меня все разобрались на стороне DirectInput, но у меня проблемы с взаимодействием перетаскивания мышью.

Вот как я делаю нажатие левой кнопки вниз:

[DllImport("user32.dll", SetLastError = true)]
static extern uint SendInput(uint nInputs, ref Input pInputs, int cbSize);
...
var aInput = new Input {
    type = 0x0,
    mouse = new MouseInput {
        dwFlags = 0x6,
        dwExtraInfo = 0,
        mouseData = 0,
        time = 0
    }
};
SendInput(1, ref aInput, 28);

где Input и MouseInput следующие:

[StructLayout(LayoutKind.Explicit)]
public struct Input {
    [FieldOffset(0)]
    public int type; // 4
    [FieldOffset(4)]
    public MouseInput mouse; // 24
}

[StructLayout(LayoutKind.Explicit)]
public struct MouseInput {
    [FieldOffset(0)]
    public int dx; // 4
    [FieldOffset(4)]
    public int dy; // 4
    [FieldOffset(8)]
    public int mouseData; // 4
    [FieldOffset(12)]
    public int dwFlags; // 4
    [FieldOffset(16)]
    public int time; // 4
    [FieldOffset(20)]
    public int dwExtraInfo; // 4
};

Этот метод работает для левой / правой кнопки мыши вниз, а System.Windows.Forms.Cursor.Position хорошо работает для перемещения мыши, но яне уверен, как получить перетаскивание мышью.Есть указатели?

Ответы [ 2 ]

3 голосов
/ 29 марта 2011

См. Соответствующие статьи здесь на SO:

Ввод данных мыши в приложениях WPF

Имитация ввода мыши / клавиатуры в WPF

Переместите мышь в wpf

РЕДАКТИРОВАТЬ: в отношении конкретной необходимости «перетаскивания», вот еще одна ссылка (из проекта NUnitForms здесь: http://nunitforms.sourceforge.net/) о коде служебной программы MouseController, который содержит методы моделирования мыши:

http://nunitforms.svn.sourceforge.net/viewvc/nunitforms/trunk/nunitforms/source/NUnitForms/MouseController.cs?view=markup

У него есть метод Drag. Вы можете проверить, работает ли это. Я знаю, что он специально разработан для WPF, но стоит попробовать. Кроме того, если речь идет только о движении мыши, я не вижу проблем, если вам нужно сослаться на сборку Winforms.

0 голосов
/ 05 февраля 2013

Бенджамин, я использовал твой код для генерации щелчка мышью. Я поиграл с содержимым и обнаружил, что установка "dwFlags = 0x3" делает нажатие левой кнопки мыши и удержание:)

...