2013-04-05 11 views
6

Bevor ich beginne, hier ist mein erster kleiner Code, den ich in Powershell geschrieben :)Powershell Mausbewegung nicht daran hindert, Idle-Modus

[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) 

Was will ich erreichen?

Nun, ich möchte den Mauszeiger alle 4 Minuten bewegen, um zu verhindern, dass der Bildschirmschoner erscheint (jede Sekunde im obigen Code zum Testen). Der Code bewegt die Maus wirklich jedes Mal um ein Pixel nach oben und dann sofort nach unten. Die Sache ist, der Bildschirmschoner (oder Leerlaufmodus von Windows) wird immer noch angezeigt.

Jetzt lerne ich PowerShell und ich habe wenig Erfahrung mit der Windows-Architektur.

Sieht jemand meinen Fehler? Ich würde eine Antwort sehr schätzen! : D Vielen Dank im Voraus.

+0

Gibt es eine eine Pixelverschiebung als genug Aktivität zählen den Bildschirmschoner zu stoppen? – MikeTheLiar

+0

Hmm, änderte es auf 100 Pixel und es geht weiter im Leerlauf – nivoe

+0

Versuchte, nicht nach der Bewegung zurückzugehen, den Cursor alle 10 Sekunden nach oben bewegen. Immer noch bin ich untätig? – nivoe

Antwort

5

Die Lösung aus dem Blog Prevent desktop lock or screensaver with PowerShell funktioniert für mich. Hier ist der relevante Skript, das einfach eine einzelne Periode an die Shell sendet:

param($minutes = 60) 

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

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

und eine Alternative aus den Kommentaren, die die Maus ein einzelnes Pixel bewegt:

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

hatte ich eine ähnliche Situation Wo ein Download benötigt wurde, um über Nacht aktiv zu bleiben, und einen Tastendruck benötigte, der meine Verbindung auffrischte. Ich fand auch, dass die Mausbewegung nicht funktioniert. Die Verwendung von Notepad und einer Send-Key-Funktion scheint jedoch den Zweck erfüllt zu haben. Ich sende ein Leerzeichen anstelle eines "." Wenn ein Popup-Fenster [Ja/Nein] vorhanden ist, wird automatisch die Standardantwort mit der Leertaste angezeigt. Hier ist der verwendete Code.

param($minutes = 120) 

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

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

Diese Funktion ist für die vorgesehenen 120 Minuten (2 Stunden) arbeiten, kann aber für die durch Erhöhen oder Verringern der Sekunden des Eingangs oder Erhöhen oder Verringern der zugewiesene Wert der Minuten Parameter gewünschten Zeitpunkt geändert werden, .

Führen Sie das Skript in Powershell ISE oder Powershell, und öffnen Sie den Editor. Ein Leerzeichen wird im angegebenen Intervall für die gewünschte Zeitspanne ($ Minuten) eingegeben.

Viel Glück!

0

Versuchen Sie folgendes: (Quelle: 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 
    } 
Verwandte Themen