如何使用C#移动鼠标光标?

如何使用C#移动鼠标光标?,c#,mouse-cursor,C#,Mouse Cursor,我想每x秒模拟一次鼠标移动。为此,我将使用计时器(x秒),当计时器滴答作响时,我将使鼠标移动 但是,如何使用C#移动鼠标光标?请查看。这应该让你开始 private void MoveCursor() { // Set the Current cursor, move the cursor's Position, // and set its clipping rectangle to the form. this.Cursor = new Cursor(Cursor.Cu

我想每x秒模拟一次鼠标移动。为此,我将使用计时器(x秒),当计时器滴答作响时,我将使鼠标移动

但是,如何使用C#移动鼠标光标?

请查看。这应该让你开始

private void MoveCursor()
{
   // Set the Current cursor, move the cursor's Position,
   // and set its clipping rectangle to the form. 

   this.Cursor = new Cursor(Cursor.Current.Handle);
   Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50);
   Cursor.Clip = new Rectangle(this.Location, this.Size);
}

首先添加一个名为Win32.cs的类

public class Win32
{ 
    [DllImport("User32.Dll")]
    public static extern long SetCursorPos(int x, int y);

    [DllImport("User32.Dll")]
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);

    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int x;
        public int y;

        public POINT(int X, int Y)
        {
            x = X;
            y = Y;
        }
    }
}
您可以这样使用它:

Win32.POINT p = new Win32.POINT(xPos, yPos);

Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);

这听起来像是你没有告诉我们的问题的一半解决方案,可能有更优雅的解决方案。这是完全可能的!我们不明白为什么,但屏幕保护程序在10分钟后被激活。但是我们花了999分钟:p这时您应该寻找解决方案,防止在应用程序运行时激活屏幕保护程序,而不是摆弄鼠标或屏幕保护程序设置。例如P/Invoke。我怀疑这是与屏幕保护程序相关的-编程鼠标移动不会重置屏幕保护程序计时器。谢谢@JamesHill,我不记得怎么做了,你的示例非常好。我在我的案例中,我在x和y上添加了一些计算,以使鼠标移动时间相关(每秒像素数)。这是WinForms方法吗?我觉得我应该提到这一点,这样就不会有人陷入我刚才遇到的滑稽问题<代码>光标。剪辑会将鼠标移动限制为
位置
大小
指定的大小。因此,上面的代码片段只允许您的鼠标在应用程序的边界框内移动。
Cursor.Position
如果在.Works中使用,可能需要一定的设置,如果Cursor.Clip行被删除,那么当窗口最小化时,它也会起作用。同样,在WinForm中,您可以使用Cursor.Position=new Point(x,y);点类型来自何处?如何使用此方法获取鼠标光标位置?这很好。。应该注意的是,这是相对于表单的左上角。因此,它与例如表单上的控件所使用的坐标相同,也与eg表单的MouseMove方法的MouseEventArgs e中使用的坐标相同(和-回答我在上面的评论中的问题-可以从中获得)。this.Handle表示WinForm应用程序,但您可以获得当前正在运行的WinForm进程之外任何正在运行的窗口的句柄。示例:IntPtr desktopWinHandle=Win32.GetDesktopWindow();其中GetDesktopWindow声明为[DllImport(“user32.dll”,SetLastError=false)]公共静态外部IntPtr GetDesktopWindow();在Win32类中。还要签出Win32互操作方法EnumWindows()。[DllImport(“user32.dll”)]公共静态外部int-EnumWindows(WndEnumProc-lpEnumFunc,int-lParam);