2013-04-05 12 views
6

Prima di iniziare, qui è il mio primo piccolo codice che ho scritto in PowerShell :)powershell spostamento del mouse non impedisce modalità inattiva

[System.Windows.Forms.Cursor]::Position = ` 
    New-Object System.Drawing.Point($pos.X, ($pos.Y - 1)) 
[System.Windows.Forms.Cursor]::Position = ` 
    New-Object System.Drawing.Point($pos.X, $pos.Y) 

Cosa voglio ottenere?

Bene, voglio spostare il cursore del mouse ogni 4 minuti per evitare che lo screensaver venga visualizzato (ogni secondo nel codice sopra per il test). Il codice sposta realmente il mouse ogni volta che si alza un pixel e poi scende immediatamente. Il fatto è che lo screensaver (o la modalità di inattività di windows) è ancora in fase di visualizzazione.

Ora sto imparando PowerShell e ho poca esperienza con l'architettura di Windows.

Qualcuno vede il mio errore? Gradirei molto una risposta! : D Grazie in anticipo.

+0

conta uno spostamento di un pixel come abbastanza attività per fermare lo screen saver? – MikeTheLiar

+0

Hmm, lo ha modificato a 100 pixel e continua a essere inattivo – nivoe

+0

Si è tentato di non tornare indietro dopo lo spostamento, lasciando il cursore in alto ogni 10 secondi. Ancora mi sembra inattivo? – nivoe

risposta

5

La soluzione dal blog Prevent desktop lock or screensaver with PowerShell funziona per me. Ecco lo script in questione, che invia semplicemente un singolo periodo per la shell:

param($minutes = 60) 

$myshell = New-Object -com "Wscript.Shell" 

for ($i = 0; $i -lt $minutes; $i++) { 
    Start-Sleep -Seconds 60 
    $myshell.sendkeys(".") 
} 

e un'alternativa dai commenti, che sposta il mouse di un singolo pixel:

$Pos = [System.Windows.Forms.Cursor]::Position 
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + 1) , $Pos.Y) 
2

ho avuto una situazione simile dove era necessario un download per rimanere attivo durante la notte e richiedeva una pressione del tasto per aggiornare la mia connessione. Ho anche scoperto che la mossa del mouse non funziona. Tuttavia, l'uso del blocco note e della funzione tasto Invia sembra aver fatto il trucco. Invio uno spazio invece di un "." perché se c'è un popup [sì/no], farà automaticamente clic sulla risposta predefinita usando la barra spaziatrice. Ecco il codice utilizzato.

param($minutes = 120) 

$myShell = New-Object -com "Wscript.Shell" 

for ($i = 0; $i -lt $minutes; $i++) { 
    Start-Sleep -Seconds 30 
    $myShell.sendkeys(" ") 
} 

Questa funzione funziona per le designati 120 minuti (2 ore), ma può essere modificato per temporizzazione desiderata aumentando o diminuendo i secondi dell'ingresso, o aumentando o diminuendo il valore assegnato al parametro minuti .

Basta eseguire lo script in powershell ISE o PowerShell e aprire il blocco note. Uno spazio verrà inserito nell'intervallo specificato per il periodo di tempo desiderato ($ minuti).

Buona fortuna!

0

Prova questo: (fonte: http://just-another-blog.net/programming/powershell-and-the-net-framework/)

Add-Type -AssemblyName System.Windows.Forms 

$position = [System.Windows.Forms.Cursor]::Position 
$position.X++ 
[System.Windows.Forms.Cursor]::Position = $position 

    while(1) { 
    $position = [System.Windows.Forms.Cursor]::Position 
    $position.X++ 
    [System.Windows.Forms.Cursor]::Position = $position 

    $time = Get-Date; 
    $shorterTimeString = $time.ToString("HH:mm:ss"); 

    Write-Host $shorterTimeString "Mouse pointer has been moved 1 pixel to the right" 
    #Set your duration between each mouse move 
    Start-Sleep -Seconds 150 
    }