C #을 사용하여 마우스 커서를 이동하는 방법은 무엇입니까?


81

x 초마다 마우스 움직임을 시뮬레이션하고 싶습니다. 이를 위해 타이머 (x 초)를 사용하고 타이머가 틱되면 마우스를 움직입니다.

그러나 C #을 사용하여 마우스 커서를 이동하려면 어떻게해야합니까?


3
이것은 당신이 우리에게 말하지 않은 문제에 대한 절반의 해결책처럼 들리며 아마도 더 우아한 해결책을 가지고있을 것입니다.
Damien_The_Unbeliever

가능합니다! 이유를 이해하지 못하지만 화면 보호기가 10 분 후에 활성화됩니다. 하지만 우리는 999 분을 넣습니다
.

3
그런 다음 마우스 나 화면 보호기 설정을 조작하는 대신 응용 프로그램이 실행 중일 때 화면 보호기가 활성화되지 않도록하는 솔루션을 찾아야합니다. 예 : P / Invoke SetThreadExecutionState . 나는 이것이 스크린 세이버와 관련이 있다고 생각했습니다-프로그래밍 된 마우스 움직임은 스크린 세이버 타이머를 재설정하지 않습니다.
Damien_The_Unbeliever

답변:


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

2
이 WinForms 접근 방식입니까?
greenoldman 2014 년

14
누군가 내가 방금 겪은 재미있는 문제에 빠지지 않도록 이것을 언급해야 할 것 같습니다. Cursor.Clip마우스의 움직임을 Location및로 지정된 크기로 제한합니다 Size. 따라서 위의 스 니펫은 응용 프로그램의 경계 상자 내에서만 마우스를 이동할 수 있도록합니다.
Brandon

Cursor.Position가상 머신 에서 사용하는 경우 특정 설정이 필요할 수 있습니다 .
Pollitzer

잘 작동하며 Cursor.Clip 줄이 제거되면 창이 최소화 될 때도 작동합니다.
Ben

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

POINT Type은 어디에서 왔습니까?
RollRoll

이 방법을 사용하여 마우스 커서 위치를 어떻게 얻습니까?
barlop

이것은 좋습니다 .. 이것은 양식의 왼쪽 상단에 상대적입니다. 그래서 그것은 예를 들어 폼의 컨트롤에서 사용되는 것과 동일한 좌표이며 (그리고-위의 주석에서 내 q에 답하기 위해-얻을 수있는) MouseEventArgs e, 예를 들어 Form의 MouseMove 메서드에서 사용 된 것과 동일한 좌표입니다.
barlop 2017-06-04
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.