如何防止屏幕保护程序在 Windows XP 上运行?由于某些安全软件,我无法禁用它,但如果有一个小程序可以每 2-3 分钟模拟一些按键,那应该可以完成这项工作。
答案1
答案2
您可以运行如下所示的 PowerShell。无需安装:
Clear-Host
# Lines needed for the notification
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$Timer = New-Object System.Windows.Forms.Timer
$ContextMenu = New-Object System.Windows.Forms.ContextMenu
$MenuItem = New-Object System.Windows.Forms.MenuItem
$form.ShowInTaskbar = $false
$form.WindowState = "minimized"
$ToggleCount = 0
$WShell = New-Object -com "Wscript.Shell"
$Logfile = "$($env:userprofile)\SLJog_$(gc env:computername).log"
#Write Host $Logfile
$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon
$objNotifyIcon.Icon = "C:\Program Files\Microsoft Office\Office16\FORMS\1033\RECL.ico"
$objNotifyIcon.ContextMenu = $ContextMenu
$objNotifyIcon.ContextMenu.MenuItems.AddRange($MenuItem)
$objNotifyIcon.Text = "Scroll Lock Toggle"
$objNotifyIcon.Visible = $True
$MenuItem.Text = "Exit"
$MenuItem.add_Click({
$Timer.Stop()
$Timer.Dispose()
$objNotifyIcon.Visible = $False
LogWrite ("$($time), Reference position:X $($global:p1.X)xY $($global:p1.Y), Current position:X $($global:p2.X)xY $($global:p2.Y),ToggleCount: $($ToggleCount) , Application exitted.")
$form.Close()
})
$p1 = [System.Windows.Forms.Cursor]::Position
$p2 = [System.Windows.Forms.Cursor]::Position
$time = get-date -Format FileDateTime
#Write Host "ToggleCount: $($ToggleCount) , $($time) "
LogWrite ("$($time), Reference position:X $($global:p1.X)xY $($global:p1.Y), Current position:X $($global:p2.X)xY $($global:p2.Y),ToggleCount: $($ToggleCount) , Application started")
$Timer.Interval = 300000 # (5 min)
$Timer.add_tick({Toggle-SL})
$Timer.Enabled = $true
$Timer.Start()
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
function Toggle-SL()
{
$time = get-date -Format FileDateTime
#Write Host "Timer toggled"
$global:p2 = [System.Windows.Forms.Cursor]::Position
LogWrite ("$($time), Reference position:X $($global:p1.X)xY $($global:p1.Y), Current position:X $($global:p2.X)xY $($global:p2.Y),ToggleCount: $($ToggleCount) , Timer triggered")
if ($global:p1.X -ne $global:p2.X -or $global:p1.Y -ne $global:p2.Y) {
$global:ToggleCount = 0
LogWrite ("$($time), Reference position:X $($global:p1.X)xY $($global:p1.Y), Current position:X $($global:p2.X)xY $($global:p2.Y),ToggleCount: $($ToggleCount) , Movement detected, togglecount zeroed")
}
If ($global:p1.X -eq $global:p2.X -and $global:p1.Y -eq $global:p2.Y -and $global:ToggleCount -lt 12)
{
$objNotifyIcon.Icon = "C:\Program Files\Microsoft Office\Office16\FORMS\1033\CNFNOT.ico"
$objNotifyIcon.Text = "Scroll Lock Toggle - Toggled $($global:ToggleCount) times"
$WShell.sendkeys("{SCROLLLOCK}")
$global:p1.X = $global:p1.X + 5
$global:p1.Y = $global:p1.Y + 5
[System.Windows.Forms.Cursor]::Position = $global:p1.X,$global:p1.Y
Start-Sleep -Milliseconds 100
$WShell.sendkeys("{SCROLLLOCK}")
$global:p1.X = $global:p1.X - 5
$global:p1.Y = $global:p1.Y - 5
[System.Windows.Forms.Cursor]::Position = $global:p1.X,$global:p1.Y
$global:ToggleCount++
LogWrite ("$($time), Reference position:X $($global:p1.X)xY $($global:p1.Y), Current position:X $($global:p2.X)xY $($global:p2.Y),ToggleCount: $($ToggleCount) , SL Toggled.")
}
$global:p1 = [System.Windows.Forms.Cursor]::Position
#Write Host "ToggleCount: $($ToggleCount) , $($time) "
$objNotifyIcon.Icon = "C:\Program Files\Microsoft Office\Office16\FORMS\1033\RECL.ico"
$objNotifyIcon.Text = "Scroll Lock Toggle - Toggled $($global:ToggleCount) times"
}
[void][System.Windows.Forms.Application]::Run($form)