@echo off setlocal title Auto Screenshot Saver set "APPDIR=%LOCALAPPDATA%\AutoScreenshotSaver" set "PSFILE=%APPDIR%\AutoScreenshotSaver.ps1" if not exist "%APPDIR%" mkdir "%APPDIR%" >nul 2>&1 > "%PSFILE%" echo Add-Type -AssemblyName System.Windows.Forms >>"%PSFILE%" echo Add-Type -AssemblyName System.Drawing >>"%PSFILE%" echo. >>"%PSFILE%" echo Add-Type @" >>"%PSFILE%" echo using System; >>"%PSFILE%" echo using System.Runtime.InteropServices; >>"%PSFILE%" echo public class ClipboardMonitor { >>"%PSFILE%" echo [DllImport("user32.dll")] >>"%PSFILE%" echo public static extern uint GetClipboardSequenceNumber(); >>"%PSFILE%" echo } >>"%PSFILE%" echo "@ >>"%PSFILE%" echo. >>"%PSFILE%" echo $createdNew = $false >>"%PSFILE%" echo $mutex = New-Object System.Threading.Mutex($true, "Local\AutoScreenshotSaver_Rajesh", [ref]$createdNew) >>"%PSFILE%" echo if (-not $createdNew) { exit } >>"%PSFILE%" echo. >>"%PSFILE%" echo $pictures = [Environment]::GetFolderPath("MyPictures") >>"%PSFILE%" echo if ([string]::IsNullOrWhiteSpace($pictures)) { $pictures = Join-Path $env:USERPROFILE "Pictures" } >>"%PSFILE%" echo $saveFolder = Join-Path $pictures "Snapshots" >>"%PSFILE%" echo if (-not (Test-Path $saveFolder)) { New-Item -ItemType Directory -Path $saveFolder -Force ^| Out-Null } >>"%PSFILE%" echo. >>"%PSFILE%" echo $lastSequence = [ClipboardMonitor]::GetClipboardSequenceNumber() >>"%PSFILE%" echo. >>"%PSFILE%" echo try { >>"%PSFILE%" echo while ($true) { >>"%PSFILE%" echo Start-Sleep -Milliseconds 300 >>"%PSFILE%" echo $currentSequence = [ClipboardMonitor]::GetClipboardSequenceNumber() >>"%PSFILE%" echo if ($currentSequence -ne $lastSequence) { >>"%PSFILE%" echo $lastSequence = $currentSequence >>"%PSFILE%" echo $saved = $false >>"%PSFILE%" echo for ($i = 0; $i -lt 6 -and -not $saved; $i++) { >>"%PSFILE%" echo try { >>"%PSFILE%" echo if ([System.Windows.Forms.Clipboard]::ContainsImage()) { >>"%PSFILE%" echo $image = [System.Windows.Forms.Clipboard]::GetImage() >>"%PSFILE%" echo if ($null -ne $image) { >>"%PSFILE%" echo $stamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss-fff" >>"%PSFILE%" echo $path = Join-Path $saveFolder ("Snapshot_" + $stamp + ".png") >>"%PSFILE%" echo $image.Save($path, [System.Drawing.Imaging.ImageFormat]::Png) >>"%PSFILE%" echo $image.Dispose() >>"%PSFILE%" echo $saved = $true >>"%PSFILE%" echo } >>"%PSFILE%" echo } >>"%PSFILE%" echo } catch { >>"%PSFILE%" echo Start-Sleep -Milliseconds 150 >>"%PSFILE%" echo } >>"%PSFILE%" echo } >>"%PSFILE%" echo } >>"%PSFILE%" echo } >>"%PSFILE%" echo } finally { >>"%PSFILE%" echo if ($mutex) { >>"%PSFILE%" echo try { $mutex.ReleaseMutex() } catch {} >>"%PSFILE%" echo $mutex.Dispose() >>"%PSFILE%" echo } >>"%PSFILE%" echo } start "" powershell.exe -NoProfile -STA -WindowStyle Hidden -ExecutionPolicy Bypass -File "%PSFILE%" timeout /t 1 /nobreak >nul echo. echo ========================================================== echo Auto Screenshot Saver started echo ========================================================== echo. echo Press: WIN + SHIFT + S echo Select the area you want. echo. echo Screenshots will be saved automatically to: echo %USERPROFILE%\Pictures\Snapshots echo. echo This window can now be closed. echo ========================================================== echo. pause endlocal