Voglio simulare il movimento del mouse ogni x secondi. Per quello, userò un timer (x secondi) e quando il timer spunta farò il movimento del mouse.Come spostare il cursore del mouse usando C#?
Ma come posso spostare il puntatore del mouse con C#?
Voglio simulare il movimento del mouse ogni x secondi. Per quello, userò un timer (x secondi) e quando il timer spunta farò il movimento del mouse.Come spostare il cursore del mouse usando C#?
Ma come posso spostare il puntatore del mouse con C#?
Dai uno sguardo allo Cursor.Position
Property. Dovresti iniziare.
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);
}
Grazie a @JamesHill, non ricordavo come fare questo e il tuo esempio è eccellente. Nel mio caso ho aggiunto alcuni calcoli a xey per rendere il movimento del mouse correlato al tempo (pixel al secondo) – Pimenta
Questo approccio di WinForms? – greenoldman
Mi sento come se dovessi menzionarlo così qualcuno non entra nel divertente problema che ho appena avuto. 'Cursor.Clip' limiterà i movimenti del tuo mouse alle dimensioni specificate da' Location' e 'Size'. Quindi il frammento sopra permetterà solo al tuo mouse di muoversi all'interno del riquadro di delimitazione dell'applicazione. – Brandon
First Aggiungi classe (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;
}
}
Poi chiamare da evento:
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);
Anche in WinForm è possibile utilizzare Cursor.Position = new Point (x, y); – user3290286
da dove viene il tipo POINT? – RollRoll
@ThePoet È una struttura utilizzata dal codice nativo. –
questo suona come una mezza soluzione ad un problema che non ci stai raccontando , che probabilmente ha soluzioni più eleganti. –
È possibile! Non capiamo perché, ma il salvaschermo è attivato passa 10 minuti. Ma mettiamo 999 minuti: P –
Quindi dovresti cercare soluzioni che impediscano l'attivazione dello screen saver quando l'applicazione è in esecuzione, piuttosto che manipolare il mouse o le impostazioni dello screensaver. Per esempio. P/Invoke [SetThreadExecutionState] (http://stackoverflow.com/questions/3665332/how-do-i-prevent-screen-savers-and-sleeps-during-my-program-execution/3665545#3665545). Sospettavo che si trattasse di un salvaschermo: i movimenti programmati del mouse non resettano il timer dello screensaver. –