尝试模拟鼠标单击/拖动

Luc*_*cas 5 c# mouseevent winforms kinect

因此,我尝试模拟鼠标左键单击和鼠标左键释放以进行一些自动拖放。

目前它在C#Winforms中(是的,winforms:|),有点像鹅。

基本上,一旦发送了Click,我希望它根据Kinect输入来更新光标位置。Kinect方面很好,但是我不确定如何找到按钮是否仍处于按下状态。

这是我当前正在使用的代码+一些psuedocode以帮助更好地解释自己(做的时候)。

class MouseImpersonator
{
    [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

    private const int leftDown = 0x02;
    private const int leftUp = 0x04;

    public static void Grab(int xPos, int yPos)
    {
        Cursor.Position = new Point(xPos + 25, yPos + 25);
        mouse_event(leftDown, (uint) xPos, (uint) yPos, 0, 0);

        //do
        //{
        //Cursor.Position = new Point(KinectSettings.movement.LeftHandX, KinectSettings.movement.LeftHandY);
        //} while (the left mouse button is still clicked);
    }

    public static void Release(int xPos, int yPos)
    {
        Cursor.Position = new Point(xPos + 25, yPos + 25);
        mouse_event(leftUp, (uint) xPos, (uint) yPos, 0, 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我搜寻过Google,除了WPF等效项之外,找不到任何我需要的东西:http : //msdn.microsoft.com/zh-cn/library/system.windows.input.mouse.aspx

我有点不尽如人意,但是任何帮助都将不胜感激。

卢卡斯

    --

Luc*_*cas 3

最简单的答案实际上是使用 bool 并检查发生了什么。

我在一个新线程上启动它,因此它不会破坏其他所有内容。

理想情况下,你应该稍微整理一下。

    public static void Grab(int xPos, int yPos)
    {
        _dragging = true;

        Cursor.Position = new Point(xPos, yPos + offSet);
        mouse_event(leftDown, (uint) xPos, (uint) yPos, 0, 0);

        var t = new Thread(CheckMouseStatus);
        t.Start();
    }
    public static void Release(int xPos, int yPos)
    {
        _dragging = false;
        Cursor.Position = new Point(xPos, yPos + offSet);
        mouse_event(leftUp, (uint) xPos, (uint) yPos, 0, 0);
    }

    private static void CheckMouseStatus()
    {
        do
        {
            Cursor.Position = new Point(KinectSettings.movement.HandX, KinectSettings.movement.HandY + offSet);
        } 
        while (_dragging);
    }
Run Code Online (Sandbox Code Playgroud)