Skip to content

Instantly share code, notes, and snippets.

@RezaBabapour
Last active March 1, 2026 09:17
Show Gist options
  • Select an option

  • Save RezaBabapour/25c62088f57be887bba6302f3158f794 to your computer and use it in GitHub Desktop.

Select an option

Save RezaBabapour/25c62088f57be887bba6302f3158f794 to your computer and use it in GitHub Desktop.
Local autoSave for Microsoft word exel powerPoint
# Run command: powershell -ExecutionPolicy Bypass -File .\autoSave.ps1
Add-Type -AssemblyName System.Windows.Forms
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class WinActive {
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
}
"@
# === SETTINGS ===
$officeApps = @("WINWORD", "EXCEL", "POWERPNT")
$logFile = "$PSScriptRoot\autosave_log.txt"
function Write-Log {
param($msg)
$timestamp = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
"$timestamp - $msg" | Out-File -Append -FilePath $logFile -Encoding UTF8
}
# Clear console and show initial message
Clear-Host
Write-Host "Office Autosave Script Started" -ForegroundColor Green
Write-Host "Logging to: $logFile" -ForegroundColor Cyan
Write-Host "Press Ctrl+C to stop" -ForegroundColor Yellow
Write-Host ""
Write-Log "=== Autosave script started ==="
while ($true) {
$timestamp = (Get-Date).ToString("HH:mm:ss")
$hWnd = [WinActive]::GetForegroundWindow()
if ($hWnd -ne 0) {
$processId = 0
# Suppress the output
$null = [WinActive]::GetWindowThreadProcessId($hWnd, [ref]$processId)
if ($processId -gt 0) {
$proc = Get-Process -Id $processId -ErrorAction SilentlyContinue
if ($proc -and $officeApps -contains $proc.ProcessName) {
[System.Windows.Forms.SendKeys]::SendWait("^s")
$logMsg = "Autosave triggered for $($proc.ProcessName) (PID: $processId)"
Write-Host "[$timestamp] $logMsg" -ForegroundColor Green
Write-Log $logMsg
}
else {
$procName = if ($proc) { $proc.ProcessName } else { "Unknown" }
$logMsg = "Skipped - active window: $procName (PID: $processId)"
Write-Host "[$timestamp] $logMsg" -ForegroundColor Gray
Write-Log $logMsg
}
}
else {
$logMsg = "Skipped - could not get process ID"
Write-Host "[$timestamp] $logMsg" -ForegroundColor Yellow
Write-Log $logMsg
}
}
else {
$logMsg = "Skipped - no active window detected"
Write-Host "[$timestamp] $logMsg" -ForegroundColor DarkGray
Write-Log $logMsg
}
Start-Sleep -Seconds 60
}
@roccocorrado22
Copy link

Ciao Reza, sono arrivato al tuoi link tramite reddit. No sono esperto di codice. Potresti spiegarmi per favore semplicemente come posso installare le tue righe di codice?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment