web-dev-qa-db-fra.com

le déplacement de la souris powershell n'empêche pas le mode veille

Avant de commencer, voici mon tout premier petit code écrit dans PowerShell :)

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

Qu'est-ce que je veux réaliser?

Eh bien, je souhaite déplacer le curseur de la souris toutes les 4 minutes pour éviter l'affichage de l'économiseur d'écran (toutes les secondes dans le code ci-dessus pour le test). Le code déplace vraiment la souris à chaque fois que vous montez et descendez immédiatement pixel par pixel ... Le fait est que l’économiseur d’écran (ou le mode veille de Windows) apparaît toujours.

Maintenant, j'apprends PowerShell et j'ai peu d'expérience de l'architecture Windows.

Est-ce que quelqu'un voit mon erreur? .__ J'apprécierais beaucoup une réponse! : D Merci d'avance.

11
nivoe

La solution du blog Empêchez le verrouillage du bureau ou l'économiseur d'écran avec PowerShell fonctionne pour moi. Voici le script approprié, qui envoie simplement une seule période au shell:

param($minutes = 60)

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

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

et une alternative aux commentaires, qui déplace la souris d'un pixel unique:

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

Dans une situation similaire, un téléchargement devait rester actif pendant la nuit et nécessitait une pression sur une touche qui rafraîchissait ma connexion .. J'ai également constaté que le déplacement de la souris ne fonctionnait pas. Cependant, utiliser le bloc-notes et une fonction de touche d'envoi semble avoir fait l'affaire. J'envoie un espace au lieu d'un "." car s'il y a une fenêtre contextuelle [oui/non], elle cliquera automatiquement sur la réponse par défaut à l'aide de la barre d'espace. Voici le code utilisé.

param($minutes = 120)

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

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

Cette fonction fonctionnera pendant les 120 minutes désignées (2 heures), mais peut être modifiée selon le temps souhaité en augmentant ou en diminuant les secondes de l’entrée, ou en augmentant ou diminuant la valeur attribuée au paramètre des minutes.

Il suffit de lancer le script dans powershell ISE ou powershell et d'ouvrir le bloc-notes. Un espace sera entré à l'intervalle spécifié pour la durée souhaitée ($ minutes).

Bonne chance!

2
CrashBandiCoot

Il existe une solution analogique à cela aussi. Il existe une application Android appelée "Timeout Blocker" qui vibre à un intervalle défini et vous placez votre souris dessus. https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=fr

2
Matt

Essayez ceci: (Source: 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  
    }  
2
Jeremy F.

J'ai ajouté une notification indiquant que vous pouvez facilement activer/désactiver la définition de sa variable sur $ true ou $ false . Le curseur de la souris se déplace également de 1 px à droite, puis de 1 px à gauche, de sorte qu'il reste au même endroit même après plusieurs itérations.

Bonne piratage!

# Lines needed for the notification
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Add-Type -AssemblyName System.Windows.Forms 
$isNotificationOn = $true

$secondsBetweenMouseMoves = 6
$Pos = [System.Windows.Forms.Cursor]::Position
$PosDelta = 1
$logFilename = "previousMouseMoverAction.txt"
$errorLogFilename = "mouseMoverLog.txt"

if (!(Test-Path "$PSScriptRoot\$logFilename")) {
   New-Item -path $PSScriptRoot -name $logFilename -type "file" -value "right"
   Write-Host "Warning: previousMouseMoverAction.txt missing, created a new one."
}

$previousPositionChangeAction = Get-Content -Path $PSScriptRoot\$logFilename

if ($previousPositionChangeAction -eq "left") {
    $PosDelta = 1
    Set-Content -Path $PSScriptRoot\$logFilename -Value 'right'
} else {
    $PosDelta = -1
    Set-Content -Path $PSScriptRoot\$logFilename -Value 'left'
}

for ($i = 0; $i -lt $secondsBetweenMouseMoves; $i++) {
    [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + $PosDelta) , $Pos.Y)
    if ($isNotificationOn) {
        # Sending a notification to the user
        $global:balloon = New-Object System.Windows.Forms.NotifyIcon
        $path = (Get-Process -id $pid).Path
        $balloon.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path) 
        $balloon.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning 
        $balloon.BalloonTipText = 'I have just moved your cheese...'
        $balloon.BalloonTipTitle = "Attention, $Env:USERNAME" 
        $balloon.Visible = $true 
        $balloon.ShowBalloonTip(3000)
    }
}
0
Pitto