C#を使用してマウスカーソルを移動するにはどうすればよいですか?


81

x秒ごとにマウスの動きをシミュレートしたい。そのために、タイマー(x秒)を使用し、タイマーが作動したらマウスを動かします。

しかし、C#を使用してマウスカーソルを移動させるにはどうすればよいですか?


3
これは、あなたが私たちに話していない問題の半分の解決策のように聞こえますが、おそらくよりエレガントな解決策があります。
damien_The_Unbeliever 2011年

それはかなり可能です!理由はわかりませんが、スクリーンセーバーが10分経過するとアクティブになります。P:しかし、我々は999分置く
AFを。

3
次に、マウスやスクリーンセーバーの設定をいじるのではなく、アプリケーションの実行中にスクリーンセーバーがアクティブにならないようにするソリューションを探す必要があります。例:P / InvokeSetThreadExecutionState。これはスクリーンセーバーに関連しているのではないかと思いました。プログラムされたマウスの動きはスクリーンセーバータイマーをリセットしません。
damien_The_Unbeliever 2011年

回答:


87

Cursor.Positionプロパティを見てください。それはあなたが始めるはずです。

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);
}

1
@JamesHillに感謝します、私はこれを行う方法を覚えていませんでした、そしてあなたの例は素晴らしいです。私の場合、マウスの移動時間を関連させるために、xとyにいくつかの計算を追加しました(ピクセル/秒)
Pimenta 2012年

2
これはWinFormsアプローチですか?
greenoldman 2014年

14
誰かが私がちょうど持っていた陽気な問題に巻き込まれないように、私はこれに言及する必要があるように感じます。Cursor.Clipマウスの動きをLocationとで指定されたサイズに制限しますSize。したがって、上記のスニペットでは、マウスがアプリケーションの境界ボックス内でのみ移動できます。
ブランドン

Cursor.Position仮想マシンで使用する場合、特定の設定が必要になる場合があります。
ポリッツァー2016

正常に機能し、Cursor.Clip行が削除されている場合は、ウィンドウが最小化されている場合にも機能します。
ベン

33

まず、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);

また、WinFormでは、Cursor.Position = new Point(x、y);を使用できます。
user3290286 2014

POINT Typeはどこから?
RollRoll 2016

この方法を使用して、マウスカーソルの位置を取得するにはどうすればよいですか?
barlop 2017年

これは良いことです。これはフォームの左上を基準にしていることに注意してください。したがって、これは、たとえばフォームのコントロールで使用されるのと同じ座標であり、たとえばフォームのMouseMoveメソッドのMouseEventArgs eで使用されるのと同じ座標です(そして-上記のコメントで私のqに答えるために-から取得できます)。
barlop 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.