私はマウスの動きをx秒ごとにシミュレートしたいと思っています。そのためには、タイマー(x秒)を使用し、タイマーが刻々と変化するとマウスの動きをします。C#を使用してマウスカーソルを移動する方法は?
しかし、C#を使用してマウスカーソルを移動するにはどうすればよいですか?
私はマウスの動きをx秒ごとにシミュレートしたいと思っています。そのためには、タイマー(x秒)を使用し、タイマーが刻々と変化するとマウスの動きをします。C#を使用してマウスカーソルを移動する方法は?
しかし、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);
}
ありがとう@JamesHill、私はこれを行う方法を覚えておらず、あなたの例は優れています。私は私の場合マウスの移動時間を関連させるためにxとyにいくつかの計算を追加しました(ピクセル/秒) – Pimenta
このWinFormsアプローチですか? – greenoldman
私はちょうど私が持っていた陽気な問題に誰かが入らないようにこれを言及すべきであるように私は感じる。 'Cursor.Clip'はマウスの動きを' Location'と 'Size'で指定されたサイズに制限します。上記のスニペットは、マウスがアプリケーションの境界ボックス内を移動することのみを許可します。 – Brandon
まず、イベントから呼び出すクラス(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;
}
}
を追加します。
Win32.POINT p = new Win32.POINT();
p.x = Convert.ToInt16(txtMouseX.Text);
p.y = Convert.ToInt16(txtMouseY.Text);
Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);
また、WinFormではCursor.Position = new Point(x、y)を使用できます。 – user3290286
どこがポイントタイプですか? – RollRoll
@ ThePoetネイティブコードで使用される構造体です。 –
これはあなたがについての私達に言っていない問題の半分の解決策のように聞こえますおそらくより洗練されたソリューションがあります。 –
これはかなり可能です!なぜスクリーンセーバーが10分経ってアクティブになったのか理解できません。しかし、我々は999分を置く:P –
あなたはマウスやスクリーンセーバーの設定をするのではなく、アプリケーションが動作しているときにスクリーンセーバーがアクティブにならないようにするソリューションを探していなければなりません。例えば。 P/Invoke [SetThreadExecutionState](http://stackoverflow.com/questions/3665332/how-do-i-prevent-screen-savers-and-sleeps-during-my-program-execution/3665545#3665545)。私はこれがスクリーンセーバー関連であると思った。プログラムされたマウスの動きはスクリーンセーバータイマーをリセットしない。 –