2011-11-08 7 views
58

매 x 초마다 마우스 움직임을 시뮬레이트하고 싶습니다. 이를 위해 타이머 (x 초)를 사용하고 타이머가 틱하면 마우스 동작을 수행합니다.C#을 사용하여 마우스 커서를 움직이는 방법은 무엇입니까?

그러나 C#을 사용하여 어떻게 마우스 커서를 움직일 수 있습니까?

+2

이 당신에 대해 우리에게 이야기하지 않는 문제에 대한 반 솔루션 같은 소리 , 아마 더 우아한 솔루션을 가지고 있습니다. –

+0

꽤 가능합니다! 우리는 왜 화면 보호기가 10 분이 지나면 활성화되는지 이해하지 못합니다. 그러나 우리는 999 분을 넣습니다. P –

+2

그러면 마우스 나 화면 보호기 설정을 사용하지 않고 응용 프로그램이 실행 중일 때 화면 보호기가 활성화되지 못하도록하는 솔루션을 찾아야합니다. 예 : P/Invoke [SetThreadExecutionState] (http://stackoverflow.com/questions/3665332/how-do-i-prevent-screen-savers-and-sleeps-during-my-program-execution/3665545#3665545). 나는 이것이 스크린 세이버와 관련이 있다고 의심했다. 프로그래밍 된 마우스 움직임은 스크린 세이버 타이머를 재설정하지 않는다. –

답변

52

을 살펴보십시오. 그것은 당신을 시작해야합니다.

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

Thanks @JamesHill, 나는 이것을하는 법을 기억하지 못했고 당신의 예가 훌륭합니다. 나는 나의 움직임 x와 y에 마우스 움직임 시간 (초당 픽셀)을 만들기 위해 몇 가지 계산을 추가했다 – Pimenta

+2

이 WinForms 접근법인가? – greenoldman

+7

나는 누군가가 내가 방금 들었던 웃기는 문제에 빠지지 않도록 이것을 언급해야한다고 생각한다. 'Cursor.Clip'은 마우스의 움직임을'Location'과'Size'에 의해 지정된 크기로 제한 할 것입니다. 위의 스 니펫은 마우스가 애플리케이션의 경계 상자 내에서만 움직이는 것을 허용합니다. – Brandon

19

먼저 추가 클래스 (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); 
+0

또한 WinForm에서 Cursor.Position = new Point (x, y)를 사용할 수있다; – user3290286

+0

POINT 유형은 어디에서입니까? – RollRoll

+0

@ThePoet 네이티브 코드에서 사용하는 구조체입니다. –

관련 문제