Вопрос по sleep, windows, powershell – Перемещение мыши powershell не мешает режиму ожидания

12

Прежде чем я начну, вот мой самый первый маленький код, который я написал в 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)

Чего я хочу достичь?

Ну, я хочу перемещать курсор мыши каждые 4 минуты, чтобы предотвратить появление заставки (каждую секунду в коде выше для тестирования). Код действительно перемещает мышь каждый раз на один пиксель вверх, а затем сразу вниз. Дело в том, что заставка (или режим ожидания окон) все еще появляется.

Сейчас я изучаю PowerShell и у меня мало опыта работы с архитектурой Windows.

Кто-нибудь видит мою ошибку? Я был бы очень признателен за ответ! : D Спасибо заранее.

Потрясающие. Для будущих пользователей с тем же вопросом, вы должны написать это в качестве ответа и принять его. Nate Hekman
Там'обсуждение (без четкого ответа, но с хорошей информацией) здесь:stackoverflow.com/questions/463813/...  - В основном говорят, что перемещения мыши недостаточно. Windows ищет пользовательский ввод, а не только движение мыши.SendInput выглядит многообещающе, хотя я нене знаю, как вызвать его из PowerShell. Nate Hekman
Ага, хорошо, я вижу. Ну, я думаюнадо будет заглянуть глубже в это :) Спасибо вам обоим nivoe
Привет, Нейт. Вы'прав, движения мыши недостаточно. Это должно быть решено с помощью SendInput, такого какdmitrysotnikov.wordpress.com/2009/06/29/... nivoe

Ваш Ответ

5   ответов
2

с Android-приложение называетсяБлокировщик тайм-аута " который вибрирует с установленным интервалом, и вы нажимаете на него мышью.https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&гл = еп

0

что вы можете легко включить / отключить, просто установив для его переменной значение $ true или $ false. Также курсор мыши перемещается на 1 пиксель вправо, а затем на 1 пиксель влево, поэтому он остается в основном на том же месте даже после нескольких итераций.

Удачного взлома!

# 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)
    }
}
13

Решение из блогаПредотвращение блокировки рабочего стола или заставки с помощью PowerShell работает на меня. Вот соответствующий скрипт, который просто отправляет один период в оболочку:

param($minutes = 60)

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

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

и альтернатива из комментариев, которая перемещает мышь на один пиксель:

$Pos = [System.Windows.Forms.Cursor]::Position
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + 1) , $Pos.Y)
Это актуально:xkcd.com/196 Dan
Я использую это на работе, где уровень безопасностиГи повесить сеанс через пять минут;) JPBlanc
2

(источник: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  
    }  
Хотя это и перемещает указатель мыши, но неК сожалению, я не могу остановить время простоя Windows. KERR
2

когда загрузка должна была оставаться активной в течение ночи, и требовалось нажатие клавиши, чтобы обновить мое соединение. Я также обнаружил, что движение мыши не работает. Тем не менее, использование блокнота и функции клавиши отправки, похоже, сделали свое дело. Я посылаю пробел вместо "." потому что, если есть всплывающее окно [да / нет], оно автоматически щелкнет ответ по умолчанию, используя пробел. Вот код, используемый.

param($minutes = 120)

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

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

Эта функция будет работать в течение назначенных 120 минут (2 часа), но ее можно изменить для требуемой синхронизации, увеличив или уменьшив секунды ввода или увеличив или уменьшив назначенное значение параметра минут.

Просто запустите сценарий в PowerShell ISE или PowerShell и откройте блокнот. Через заданный интервал будет вводиться пробел в течение желаемого промежутка времени ($ минут).

Удачи!

Этот ответ является тупой копией более раннего ответа (6 месяцев) от @jpblanc t0r0X

Похожие вопросы