o movimento do rato em 'powershell' não impede o modo inactivo

Antes de começar, aqui está o meu primeiro pequeno código que escrevi em 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)
O que quero alcançar?

bem, quero mover o cursor do rato a cada 4 minutos para evitar que o protector de ecrã apareça (a cada segundo no código acima para testes). O código realmente move o mouse cada vez que um pixel para cima e depois para baixo imediatamente. A coisa é, o screensaver (ou modo de marcha lenta das janelas) ainda está aparecendo.

Agora, estou aprendendo PowerShell e eu tenha pouca experiência com a arquitetura Windows.

Alguém vê o meu erro? Gostaria muito de ter uma resposta! :D Obrigado antecipadamente.

Author: nivoe, 2013-04-05

4 answers

A solução do blog impede o bloqueio do ecrã ou o protector de ecrã com o PowerShell está a funcionar para mim. Aqui está o script relevante, que simplesmente envia um único período para a shell:

param($minutes = 60)

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

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

E uma alternativa dos comentários, que move o rato um único pixel:

$Pos = [System.Windows.Forms.Cursor]::Position
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + 1) , $Pos.Y)
 10
Author: JPBlanc, 2016-01-27 15:40:31
Tive uma situação semelhante em que um download precisava de permanecer activo durante a noite e precisava de uma tecla que refrescasse a minha ligação. Também descobri que o movimento do rato não funciona. No entanto, usando o notepad e uma função chave send parece ter feito o truque. Eu mando um espaço em vez de um "."porque se houver um popup [sim / não], ele irá automaticamente clicar na resposta padrão usando a barra de espaço. Aqui está o código usado.
param($minutes = 120)

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

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

Esta função funcionará para os 120 minutos (2 Horas), mas pode ser modificado para o tempo desejado, aumentando ou diminuindo os segundos da entrada, ou aumentando ou diminuindo o valor atribuído a minutos de parâmetro.

Basta executar o script em powershell ISE, ou powershell, e abrir o bloco de notas. Será introduzido um espaço no intervalo indicado para o período de tempo desejado ($minutos). Boa Sorte!
 3
Author: CrashBandiCoot, 2013-10-23 16:44:36
Tenta isto.: (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  
    }  
 2
Author: Jeremy F., 2015-12-02 18:08:26
Também há uma solução analógica para isto. Há um aplicativo android chamado "Timeout Blocker" que vibra em um intervalo definido e você coloca seu mouse nele. https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=en
 1
Author: Matt, 2014-06-06 21:39:27