powershell 防止休眠或屏幕關閉
01 前言
因工作需要,需要在用戶的機器上進行操作,有些工作比較耗時、耗CPU,配置也不高,因而就不能用這臺機器同時干太多活,又不能干盯著啥也干不了,但是一段時間不操作,機器很快就進入屏保。那么,不如搞個腳本,定時模擬鍵盤按下,那就不會進入屏保了,同時加一個截屏功能,還可以回看過程。
02 正文
測試環境:Windows 10
腳本如下:
@echo off
title SendKeysAndGetScreenShootREM 圖片保存路徑
set savePath=C:\screenshotREM 間隔多少秒,最小5
set duration=10REM 最大次數,若小于0,表示無限制,如需退出,可手工結束進程,Ctrl+C
set maxCount=0powershell.exe -comm "$code = '[DllImport('+[char]34+'gdi32.dll'+[char]34+', EntryPoint = '+[char]34+'GetDeviceCaps'+[char]34+', SetLastError = true)] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);';Add-Type -Name Windows -Namespace System -MemberDefinition $code;Add-Type -AssemblyName 'system.drawing','system.windows.forms'; $path = '%savePath%'; $gra = [System.Drawing.Graphics]::FromHwnd(([IntPtr]::Zero));$desk = $gra.GetHdc();$h = [Windows]::GetDeviceCaps($desk,117);$w = [Windows]::GetDeviceCaps($desk,118);$gra.Dispose();[int]$maxCnt = '%maxCount%'; if($maxCnt -lt 1){ $maxCnt = [int]::MaxValue; };[int]$dura='%duration%'; if($dura -lt 5){ $dura = 5; } $flag = $false; $cnt = 0; do {$d = Get-Date;$ts = $d.ToString('yyyy_MM_dd_HH_mm_ss'); [System.Windows.Forms.SendKeys]::SendWait('{capslock}'); $f = Join-Path -Path $path -ChildPath ('{0}.png' -f $ts);$bitmap = [System.Drawing.Bitmap]::new($w,$h);$g = [System.Drawing.Graphics]::FromImage($bitmap);$g.CopyFromScreen(0,0,0,0,[System.Drawing.Size]::new($w,$h)); $bitmap.Save($f);$bitmap.Dispose(); $cnt++; if($cnt -ge $maxCnt){ break;} sleep -Seconds $dura; } until ($false)"
使用腳本注意:
powershell
5.1
下測試通過代碼另存為
run.bat
,雙擊運行即可圖片保存路徑,應該是已存在的目錄
模擬鍵盤輸入
capslock
鍵,如需其他按鍵可自行修改
03 后記
友情提醒:腳本僅供學習交流使用。如果是在一些比較隱私的場景下,請謹慎使用。如因使用腳本造成泄密事件,后果自負。
歡迎留言交流~
------END------