【问题标题】:Full mouse control emulation using wpf: click, drag, enter, exit使用 wpf 的完整鼠标控制仿真:单击、拖动、进入、退出
【发布时间】:2011-07-25 10:43:30
【问题描述】:

我正在处理一个需要使用操纵杆 (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 适用于鼠标移动,但我不确定如何设置鼠标拖动。有什么指点吗?

【问题讨论】:

    标签: c# wpf mouse emulation


    【解决方案1】:

    在此处查看有关 SO 的相关文章:

    Injecting Mouse Input in WPF Applications

    Simulate Mouse/Keyboard Input In WPF

    Move the mouse in wpf

    编辑:关于特定的“拖动”需求,这里是另一个关于包含鼠标模拟方法的 MouseController 实用程序代码的链接(来自 NUnitForms 项目:http://nunitforms.sourceforge.net/):

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

    它有一个 Drag 方法。你可以测试这是否有效。我知道,它是专为 WPF 设计的,但值得一试。另外,如果只是关于鼠标移动,如果您需要引用 Winforms 程序集,我认为没有问题。

    【讨论】:

    • 不幸的是,这些文章似乎都没有回答我关于在鼠标按下时移动鼠标的问题。全局鼠标和键盘库 (codeproject.com/KB/system/globalmousekeyboardlib.aspx) 看起来可能有效,但它仍然需要我确切地知道谁应该监听鼠标移动,这在我的程序中可能是不可能的。第三个链接只是规定了我用于鼠标移动的确切方法,同时完全排除了鼠标单击的问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-06-30
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 2020-01-30
      相关资源
      最近更新 更多