使用wpf进行完全鼠标控制仿真:单击,拖动,输入,退出

时间:2011-03-29 16:21:45

标签: c# wpf mouse emulation

我正在开发一个项目,我需要使用操纵杆(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 个答案:

答案 0 :(得分:3)

请参阅此处的相关文章:

Injecting Mouse Input in WPF Applications

Simulate Mouse/Keyboard Input In WPF

Move the mouse in 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组件,我没有看到问题。

答案 1 :(得分:0)

Benjamin,我用你的代码生成鼠标点击。我玩了内容,发现设置“dwFlags = 0x3”鼠标左键单击并按住:)