C# 鼠标单击并拖动不起作用

C# 鼠标单击并拖动不起作用,c#,winforms,C#,Winforms,我有一个外部窗口,我正在发送鼠标单击并拖动到该窗口。出于某种原因,它没有拖拽它。非常感谢您的帮助 public void clickAndDrag(Point pointA, Point pointB) { Point tmp = Cursor.Position; mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0); Cursor.Position = Conver

我有一个外部窗口,我正在发送鼠标单击并拖动到该窗口。出于某种原因,它没有拖拽它。非常感谢您的帮助

        public void clickAndDrag(Point pointA, Point pointB)
    {
        Point tmp = Cursor.Position;

        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
        Cursor.Position = ConvertToScreenPixel(pointA);
        System.Threading.Thread.Sleep(1000);
        mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
        Cursor.Position = ConvertToScreenPixel(pointB);
        System.Threading.Thread.Sleep(1000);
        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);


        Cursor.Position = tmp;
    }

我想出来了。我想你需要慢慢移动鼠标。但这对点击并向左拖动有点作用。这完全是垃圾,但我太累了,无法尝试重构它

        public void clickAndDrag(Point pointA)
    {
        Point tmp = Cursor.Position;
        pointA.X = pointA.X + 20;
        pointA.Y = pointA.Y + 20;

        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
        Cursor.Position = ConvertToScreenPixel(pointA);
        System.Threading.Thread.Sleep(1000);
        mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);

        for (var i = 0; i < 10; i++)
        {
            pointA.X = pointA.X - 10;
            Cursor.Position = ConvertToScreenPixel(pointA);
            System.Threading.Thread.Sleep(200);
            mouse_event((int)(MouseEventFlags.MOVE), 0, 0, 0, 0);
        }


        mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);


        Cursor.Position = tmp;
    }
public void单击并拖动(点A)
{
点tmp=光标位置;
pointA.X=pointA.X+20;
pointA.Y=pointA.Y+20;
鼠标事件((int)(MouseEventFlags.LEFTUP),0,0,0,0);
Cursor.Position=converttoscreenpix(点A);
系统线程线程睡眠(1000);
鼠标事件((int)(MouseEventFlags.LEFTDOWN),0,0,0,0);
对于(变量i=0;i<10;i++)
{
pointA.X=pointA.X-10;
Cursor.Position=converttoscreenpix(点A);
系统线程线程睡眠(200);
鼠标事件((int)(MouseEventFlags.MOVE),0,0,0,0);
}
鼠标事件((int)(MouseEventFlags.LEFTUP),0,0,0,0);
光标位置=tmp;
}

您是指不属于您的程序的外部窗口?你想改变它的位置吗?外部窗口不属于我,我无权访问它的代码。我不想更改窗口位置,因为我已经可以使用其他方法来更改。我想单击一个坐标,按住该键直到到达第二个坐标,然后松开该键。恐怕这是不可能的。你要做的是向它发送一条消息,如果它不是为接受你的消息并返回结果而设计的,那就没有办法了。您需要该窗口的代码使其接受您的方法并相应地执行操作。为什么不可能呢?我可以发送点击命令,它的工作,我也可以发送按钮按下窗口,它通过窗口处理工作。正常的左键单击目前可以工作,但我无法让它模拟鼠标点击保持释放。@AmmarSalman:当然可以
mouse\u事件
将鼠标数据放入鼠标输入流中,因此其行为就像手动移动鼠标一样。因此,它也不是针对特定窗口的。