2011-11-08 22 views
58

Chcę symulować ruch myszy co x sekund. W tym celu użyję timera (x sekund) i gdy tykasz zegar, wykonam ruch myszy.Jak przesunąć kursor myszy za pomocą C#?

Ale w jaki sposób ustawić kursor myszy za pomocą C#?

+2

To brzmi jak pół rozwiązanie problemu nie mówisz nam o , to prawdopodobnie ma bardziej eleganckie rozwiązania. –

+0

To całkiem możliwe! Nie rozumiemy dlaczego, ale wygaszacz ekranu aktywuje się po 10 minutach. Ale umieściliśmy 999 minut: P –

+2

Następnie należy szukać rozwiązań, które zapobiegają uruchomieniu wygaszacza ekranu podczas uruchamiania aplikacji, zamiast manipulowania myszą lub ustawieniami wygaszacza ekranu. Na przykład. P/Invoke [SetThreadExecutionState] (http://stackoverflow.com/questions/3665332/how-do-i-prevent-screen-savers-and-sleeps-during-my-program-execution/3665545#3665545). Podejrzewałem, że jest to związany z wygaszaczem ekranu - zaprogramowane ruchy myszki nie resetują timera ekranu. –

Odpowiedz

52

Spójrz na Cursor.Position Property. To powinno zacząć.

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

Dzięki @JamesHill, nie pamiętam, jak to zrobić, a twój przykład jest doskonały. W moim przypadku dodałem kilka obliczeń do x i y, aby powiązać czas ruchu myszy (piksel na sekundę). – Pimenta

+2

Czy to podejście WinForm? – greenoldman

+7

Czuję, że powinienem o tym wspomnieć, aby ktoś nie wpadł w zabawny problem, który właśnie miałem. 'Cursor.Clip' ograniczy ruch twojej myszki do rozmiaru określonego przez' Location' i 'Size'. Tak więc powyższy fragment umożliwi ruch myszy tylko w ramce ograniczającej aplikacji. – Brandon

19

najpierw dodać Class (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; 
    } 
} 

następnie połączyć go z imprezy:

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

Również w WinForm możesz użyć Cursor.Position = new Point (x, y); – user3290286

+0

gdzie jest POINT Type from? – RollRoll

+0

@ThePoet Jest to struktura używana przez natywny kod. –

Powiązane problemy