Précisons d’abord que je ne suis pas responsable de l’usage que vous ferrez de ça.

Il faut savoir que plusieurs situations peuvent justifier l’usage d’un outil qui empêche la mise en veille, par exemple les tâches automatisées très longues.

Un effet de bord de ce script qui simule la pression de la touche F15 (inutile de chercher sur votre clavier), c’est que ça simule une activité au clavier, donc ça peut aussi empêcher des applications tel que Teams de vous détecter comme absent, ce qui une bonne ou mauvaise chose suivant le but recherché.

Je n’ai pas créé la méthode du F15, elle est très répandue sur le net donc difficile de créditer l’auteur initial.

Version discrète vous avez dit ?

Mon but ici était de faire une fonction F15 avec les contraintes suivantes:

  • Cacher l’utilisation du F15 dans la console
  • Reproduire une fenêtre normale de PowerShell exécutant la commande « Get-ChildItem * »
  • Simuler un F15 toutes les 295 secondes
  • Sortir de la fonction à la moindre touche pressée (insensible à la touche F15)

Voici ce que ça donne, rappelez vous que tout ce que vous voyez dans la console est construit par la fonction, c’est donc un trompe-l’œil:

Sans plus attendre, voici la fonction:

function Set-NoSleep {
    $LoopSec = 295
    $wsh = New-Object -ComObject WScript.Shell
    Clear-Host
    $host.ui.RawUI.WindowTitle = "Windows PowerShell"
    Write-Host "PowerShell " -NoNewline
    Write-Host ("v" + $(($PSVersionTable.PSversion.ToString() -split "\.")[0..1] -join ".") + " ") -ForegroundColor green 
    Write-Host "PS $((pwd).Path)> " -NoNewline
    Write-Host "Get-ChildItem " -NoNewline -ForegroundColor Yellow
    Write-Host "*" -ForegroundColor DarkGray
    Get-ChildItem
    ""
    ""
    Write-Host "PS $((pwd).path)> " -NoNewline


    $Timer = [System.Diagnostics.Stopwatch]::StartNew()
    $keyInfo = $null

    while($keyInfo -eq $null) {
        do {
            if ([Console]::KeyAvailable){
                $keyInfo = [Console]::ReadKey($true)
                break
            }
            
            # $Timer.Elapsed.TotalSeconds
            Start-Sleep -Seconds 1
        } while ($timer.Elapsed.TotalSeconds -lt $LoopSec)
        $wsh.SendKeys('+{F15}')
        $Timer.Reset()
        $Timer.Start()
    }

    $Timer.Stop()
}

Set-NoSleep

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *