Tramite PowerShell è possibile muovere il puntatore del mouse utilizzando l'assembly System.Windows.Forms, che contiene le classi per gestire la finestra grafica.
Un semplice script che muove il mouse ogni 30 secondi è il seguente
Add-Type -AssemblyName System.Windows.Forms
# Ciclo infinito che aggiorna la posizione del mouse ogni 30 secondi finchè non viene premuto CTRL+C o chiusa la finestra
while ($true)
{
# Rileva la posizione attuale del mouse
$Pos = [System.Windows.Forms.Cursor]::Position
# Creo le nuove coordinate del puntatore aggiungendo un pixel e facendo in modo da non uscire dallo schermo (% 500)
$x = ($pos.X % 500) + 1
$y = ($pos.Y % 500) + 1
# Posiziona il puntatore del mouse nelle nuove coordinate
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)
# Attende 30 secondi
Start-Sleep -Seconds 30
}
Nello script, per evitare che il mouse finisca fuori dallo schermo, è stato adottato un piccolo espediente: il valore delle coordinate viene diviso per 500 e viene prelevato il resto della divisione (che sarà sicuramente inferiore a 500).
Per muovere il cursore in maniera randomica sullo schermo si può utilizzare il seguente script
Add-Type -AssemblyName System.Windows.Forms
# Rileva la risoluzione del monitor principale
$WindowSize = [System.Windows.Forms.Screen]::GetWorkingArea(0)
$MaxWidth = $WindowSize.Width
$MaxHeight = $WindowSize.Height
#Esegue un loop e aggiorna la posizione del mouse finché non viene premuto CTRL + C o viene chiusa la finestra
while ($true)
{
# Genera randomincamente le nuove coordinale tenendo conto della risoluzione
$x = (Get-Random -Minimum 0 -Maximum $MaxWidth)
$y = (Get-Random -Minimum 0 -Maximum $MaxHeight)
Write-Host "`rNew position: x:$($x),y:$($y) " -NoNewLine
# Posiziona il cursore nelle nuove coordinate
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)
# Attende 30 secondi
Start-Sleep -Seconds 30
}
Per chi stesse pensando di utilizzare questo metodo per evitare che Windows vada in stand-by in caso di inattività, dovrà pensare ad una soluzione alternativa. Il movimento del mouse tramite PowerShell, infatti, non è sufficiente affinché il sistema venga considerato "attivo" e Windows provvederà comunque a visualizzare lo screensaver, oscurare/bloccare lo schermo o attivare il risparmio energetico dopo un periodo di inattività.
Per fare in modo che Windows rilevi che il pc sia utilizzato è necessario un input da parte dell'utente e non solo il movimento del mouse. Per simulare l'input da parte dell'utente, ad esempio la pressione di un tasto, si può utilizzare il metodo SendKeys che illustrerò in un altro articolo.