Das wäre mal ein Quick'n'Dirty Anfang: # https://superuser.com/questions/1356701/powershell-detect-if-a-window-or-program-is-foreground-or-background
$code = @'
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
'@
Add-Type $code -Name Utils -Namespace Win32
[IntPtr]$ActiveHandle = [Win32.Utils]::GetForegroundWindow()
[IntPtr]$tmpHandle = $ActiveHandle
[datetime]$Start = (Get-Date).AddDays(-1)
[datetime]$End = Get-Date
do{
[string]$text = @()
if($End -gt $Start){
$Start = Get-Date
}
$ActiveHandle = [Win32.Utils]::GetForegroundWindow()
if($ActiveHandle -ne $tmpHandle){
$Process = Get-Process |
where-object { $_.MainWindowHandle -eq $tmpHandle }
$End = Get-Date
$Time = New-TimeSpan -Start $Start -End $End
if($Time.Hours -eq 1){
$text += "1 Stunde "
} elseif($time.Hours -gt 1){
$text += "$($Time.Hours) Stunden "
}
if($Time.Minutes -eq 1){
$text += "1 Minute "
} elseif($Time.Minutes -gt 1){
$text += "$($Time.Minutes) Minuten "
}
if($Time.Seconds -eq 1){
$text += "1 Sekunde "
} elseif($Time.Seconds -gt 1){
$text += "$($Time.Seconds) Sekunden "
}
Write-Host "$($Process.MainModule.ModuleName) | $($Process.MainWindowTitle): Laufzeit $text"
$tmpHandle = $ActiveHandle
}
Start-Sleep -Seconds 1
}while($true)
... Mehr anzeigen