Thiemo Melhorn

Dieses Skript ist ein PowerShell-Skript zur Optimierung von Windows-Systemen.

Hinweis: Zur Ausführung des Skripts sind Administratorrechte erforderlich. Bitte führe das Skript mit "Mit PowerShell ausführen" als Administrator aus.

tmCleaner

        
<#
.SYNOPSIS
    tmCleaner

.DESCRIPTION
    Entfernt Bloatware & maximiert Datenschutz.
    FIX: Präzise Erkennung für Teams & OneDrive (Datei-Check).
    NEU: Filter "Nur Installiertes anzeigen" (Bereits saubere Apps werden ausgeblendet).
    
.NOTES
    Version:    4.3.0
    License:    MIT License
#>

# =============================================================================
# 1. INITIALISIERUNG & ADMIN CHECK
# =============================================================================

Write-Host "Starte tmCleaner" -ForegroundColor Magenta

$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Warning "ACHTUNG: Bitte Rechtsklick -> 'Mit PowerShell ausführen' (Admin)!"
    Start-Sleep -Seconds 4
    Exit
}

try {
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing
} catch {
    Write-Error "Kritischer Fehler: Windows Forms konnte nicht geladen werden."
    Exit
}

# =============================================================================
# 2. SPRACHE & TEXTE
# =============================================================================

$sysLang = (Get-UICulture).TwoLetterISOLanguageName
if ($sysLang -ne "de") { $sysLang = "en" }

$LangDict = @{
    Title       = @{ de="tmCleaner"; en="tmCleaner" }
    
    TabApps     = @{ de="Apps & Bloatware"; en="Apps & Bloatware" }
    TabPriv     = @{ de="System & Datenschutz"; en="System & Privacy" }

    StatCheck   = @{ de="Status..."; en="Status..." }
    StatInst    = @{ de="INSTALLIERT"; en="INSTALLED" }
    StatClean   = @{ de="SAUBER"; en="CLEAN" }
    StatProt    = @{ de="GESCHÜTZT"; en="PROTECTED" }
    StatOpen    = @{ de="OFFEN"; en="OPEN" }

    BtnSelAll   = @{ de="Alle auswählen"; en="Select All" }
    BtnStart    = @{ de="START: Vernichten & Härten"; en="START: Destroy & Harden" }
    BtnDone     = @{ de="Fertig!"; en="Done!" }
    BtnWork     = @{ de="Arbeite..."; en="Working..." }
    
    ChkHideClean= @{ de="Nur Installiertes / Ungeschütztes anzeigen"; en="Show only Installed / Unprotected" }
    
    BtnRestApps = @{ de="Original-Apps wiederherstellen"; en="Restore Default Apps" }
    BtnRestPriv = @{ de="Einstellungen zurücksetzen"; en="Reset Privacy Settings" }

    MsgDone     = @{ de="Fertig! Die Liste wurde aktualisiert."; en="Done! List has been updated." }
    MsgRestApp  = @{ de="Original-Apps neu installieren?`nDas dauert einige Minuten."; en="Reinstall default apps?`nThis will take a few minutes." }
    MsgRestPriv = @{ de="Alle Datenschutz-Einstellungen auf Windows-Standard zurücksetzen?"; en="Reset all privacy settings to Windows defaults?" }
    
    LogRestore  = @{ de="Erstelle Wiederherstellungspunkt..."; en="Creating Restore Point..." }
}

function Get-Text($key) { return $LangDict[$key][$sysLang] }

# =============================================================================
# 3. DATENBANKEN
# =============================================================================

$global:InstalledAppsCache = @()

$appsData = @(
    # --- HARDCORE REMOVALS ---
    @{ Id="*OneDrive*"; Name="Microsoft OneDrive"; Desc=@{de="Status-Check: Prüft, ob OneDrive.exe noch existiert."; en="Check: Checks if OneDrive.exe exists."} },
    @{ Id="*MicrosoftTeams*"; Name="Microsoft Teams (Alle)"; Desc=@{de="Status-Check: Prüft App, Installer-MSI und Exe-Dateien."; en="Check: Checks App, MSI and Exe files."} },
    
    # --- Social & Media ---
    @{ Id="*King.BubbleWitch*"; Name="Candy Crush / King"; Desc=@{de="Spiele-Bloatware."; en="Game bloatware."} },
    @{ Id="*Disney*"; Name="Disney+"; Desc=@{de="Streaming App."; en="Streaming App."} },
    @{ Id="*Spotify*"; Name="Spotify"; Desc=@{de="Musik App."; en="Music App."} },
    @{ Id="*Netflix*"; Name="Netflix"; Desc=@{de="Video App."; en="Video App."} },
    @{ Id="*TikTok*"; Name="TikTok"; Desc=@{de="Social Media."; en="Social Media."} },
    @{ Id="*Instagram*"; Name="Instagram"; Desc=@{de="Social Media."; en="Social Media."} },
    @{ Id="*Facebook*"; Name="Facebook"; Desc=@{de="Social Media."; en="Social Media."} },
    @{ Id="*SkypeApp*"; Name="Skype"; Desc=@{de="Messenger."; en="Messenger."} },
    @{ Id="*LinkedIn*"; Name="LinkedIn"; Desc=@{de="Business Netzwerk."; en="Business Network."} },

    # --- Microsoft Standard Bloat ---
    @{ Id="*BingWeather*"; Name=@{de="Bing Wetter"; en="Bing Weather"}; Desc=@{de="Wetter App."; en="Weather App."} },
    @{ Id="*BingNews*"; Name=@{de="Bing Nachrichten"; en="Bing News"}; Desc=@{de="Nachrichten App."; en="News App."} },
    @{ Id="*GetStarted*"; Name=@{de="Erste Schritte"; en="Get Started"}; Desc=@{de="Tipps App."; en="Tips App."} },
    @{ Id="*OfficeHub*"; Name=@{de="Office App (Web)"; en="Office App (Web)"}; Desc=@{de="Office Web Verknüpfung."; en="Office Web Link."} },
    @{ Id="*YourPhone*"; Name=@{de="Ihr Smartphone"; en="Phone Link"}; Desc=@{de="Handy Kopplung."; en="Phone Pairing."} },
    @{ Id="*WindowsFeedbackHub*"; Name=@{de="Feedback Hub"; en="Feedback Hub"}; Desc=@{de="Feedback Tool."; en="Feedback Tool."} },
    @{ Id="*Xbox*"; Name="Xbox UI & Services"; Desc=@{de="Gaming Dienste & Overlay."; en="Gaming Services."} },
    @{ Id="*SolitaireCollection*"; Name="Solitaire"; Desc=@{de="Kartenspiele."; en="Card Games."} },
    @{ Id="*MixedReality*"; Name="Mixed Reality"; Desc=@{de="VR Portal."; en="VR Portal."} },
    @{ Id="*Cortana*"; Name="Cortana"; Desc=@{de="Sprachassistent."; en="Voice Assistant."} },
    @{ Id="*3DBuilder*"; Name="3D Builder"; Desc=@{de="3D Modellierung."; en="3D Modeling."} },
    @{ Id="*Paint3D*"; Name="Paint 3D"; Desc=@{de="3D Malprogramm."; en="3D Painting."} },
    @{ Id="*Microsoft.People*"; Name=@{de="Kontakte App"; en="People App"}; Desc=@{de="Taskleisten-Kontakte."; en="Taskbar Contacts."} },
    @{ Id="*Microsoft.Todos*"; Name=@{de="Microsoft To Do"; en="Microsoft To Do"}; Desc=@{de="Aufgabenliste."; en="To Do List."} },
    @{ Id="*PowerAutomateDesktop*"; Name=@{de="Power Automate"; en="Power Automate"}; Desc=@{de="Automatisierung."; en="Automation."} },
    @{ Id="*Microsoft.GetHelp*"; Name=@{de="Hilfe anfordern"; en="Get Help"}; Desc=@{de="Support App."; en="Support App."} },
    @{ Id="*OneNote*"; Name=@{de="OneNote"; en="OneNote"}; Desc=@{de="Notizen App."; en="Notes App."} },
    @{ Id="*WindowsSoundRecorder*"; Name=@{de="Sprachrekorder"; en="Voice Recorder"}; Desc=@{de="Audio Aufnahme."; en="Audio Recorder."} },
    
    # --- Utilities ---
    @{ Id="*WindowsCamera*"; Name=@{de="Kamera"; en="Camera"}; Desc=@{de="Webcam App."; en="Webcam App."} },
    @{ Id="*WindowsMaps*"; Name=@{de="Karten"; en="Maps"}; Desc=@{de="Offline Karten."; en="Offline Maps."} },
    @{ Id="*windowscommunicationsapps*"; Name=@{de="Mail & Kalender"; en="Mail & Calendar"}; Desc=@{de="Alte Mail App."; en="Old Mail App."} },
    @{ Id="*WindowsPhotos*"; Name=@{de="Fotos"; en="Photos"}; Desc=@{de="Bildbetrachter."; en="Photo Viewer."} },
    @{ Id="*WindowsCalculator*"; Name=@{de="Rechner"; en="Calculator"}; Desc=@{de="Taschenrechner."; en="Calculator."} },
    @{ Id="*ZuneMusic*"; Name=@{de="Groove Musik"; en="Groove Music"}; Desc=@{de="Musik Player."; en="Music Player."} },
    @{ Id="*ZuneVideo*"; Name=@{de="Filme & TV"; en="Movies & TV"}; Desc=@{de="Video Player."; en="Video Player."} },
    @{ Id="*WindowsAlarms*"; Name=@{de="Uhr"; en="Clock"}; Desc=@{de="Wecker & Timer."; en="Alarm & Timer."} },
    @{ Id="*MicrosoftStickyNotes*"; Name=@{de="Kurznotizen"; en="Sticky Notes"}; Desc=@{de="Desktop Notizen."; en="Desktop Notes."} },

    # --- God Mode ---
    @{ Id="*Microsoft.Wallet*"; Name="Microsoft Wallet"; Desc=@{de="Bezahldienst."; en="Payment Service."} },
    @{ Id="*QuickAssist*"; Name="Quick Assist"; Desc=@{de="Fernwartung."; en="Remote Assistance."} },
    @{ Id="*ParentalControls*"; Name="Family Safety"; Desc=@{de="Kindersicherung."; en="Parental Controls."} },
    @{ Id="*BioEnrollment*"; Name="Hello Setup"; Desc=@{de="Gesichtserkennung Setup."; en="FaceID Setup."} },
    @{ Id="*OutlookForWindows*"; Name="Outlook (New)"; Desc=@{de="Neues Web-Outlook."; en="New Web Outlook."} },
    @{ Id="*Windows.DevHome*"; Name="Dev Home"; Desc=@{de="Entwickler Tools."; en="Dev Tools."} },
    @{ Id="*Microsoft.BingSearch*"; Name="Bing Search"; Desc=@{de="Suchleisten App."; en="Search Bar App."} }
)

$privacyData = @(
    @{ Id="Tel_Basic"; Name=@{de="Telemetrie & Dienste STOPPEN"; en="Kill Telemetry & Services"}; Desc=@{de="DiagTrack Dienst & Registry."; en="DiagTrack Service & Registry."} },
    @{ Id="Tel_AdID"; Name=@{de="Werbe-ID deaktivieren"; en="Disable Advertising ID"}; Desc=@{de="Kein Ad-Tracking."; en="No Ad-Tracking."} },
    @{ Id="Tel_Consumer"; Name=@{de="Auto-Install Block"; en="Block Auto-Install"}; Desc=@{de="Keine Candy Crush Installation."; en="No Candy Crush install."} },
    @{ Id="Tel_BingStart"; Name=@{de="Web-Suche im Startmenü aus"; en="Disable Web Search in Start"}; Desc=@{de="Kein Bing im Startmenü."; en="No Bing in Start."} },
    @{ Id="Tel_Loc"; Name=@{de="Positionserkennung (GPS) aus"; en="Disable Location (GPS)"}; Desc=@{de="Systemweites GPS aus."; en="Systemwide GPS off."} },
    @{ Id="Tel_WifiShare"; Name=@{de="WLAN Sense deaktivieren"; en="Disable Wi-Fi Sense"}; Desc=@{de="Kein Hotspot-Sharing."; en="No Hotspot sharing."} },
    @{ Id="Tel_Activity"; Name=@{de="Aktivitätsverlauf aus"; en="Disable Activity History"}; Desc=@{de="Keine Timeline."; en="No Timeline."} },
    @{ Id="Tel_Clip"; Name=@{de="Zwischenablage Cloud-Sync aus"; en="Disable Cloud Clipboard"}; Desc=@{de="Kein Clipboard Upload."; en="No Clipboard Upload."} },
    @{ Id="Tel_Ink"; Name=@{de="Tippverhalten-Analyse aus"; en="Disable Typing Insights"}; Desc=@{de="Kein Keylogging für Vorhersagen."; en="No prediction keylogging."} },
    @{ Id="Tel_Feed"; Name=@{de="Feedback-Anfragen aus"; en="Disable Feedback Requests"}; Desc=@{de="Keine Bewertungs-Popups."; en="No rating popups."} },
    @{ Id="Tel_WUDO"; Name=@{de="P2P Updates (WUDO) aus"; en="Disable P2P Updates (WUDO)"}; Desc=@{de="Kein Update-Upload."; en="No Update Upload."} },
    @{ Id="Tel_Exp"; Name=@{de="Maßgeschneiderte Werbung aus"; en="Disable Tailored Experiences"}; Desc=@{de="Keine Nutzungs-Tipps."; en="No usage tips."} },
    @{ Id="Tel_AppLaunch"; Name=@{de="App-Start Tracking aus"; en="Disable App Launch Tracking"}; Desc=@{de="Startmenü-Tracking aus."; en="Startmenu tracking off."} },
    @{ Id="Tel_Sync"; Name=@{de="Einstellungen-Sync deaktivieren"; en="Disable Settings Sync"}; Desc=@{de="Kein Cloud-Sync."; en="No Cloud Sync."} },
    @{ Id="Tel_SettingsAds"; Name=@{de="Vorschläge in Einstellungen aus"; en="Disable Ads in Settings App"}; Desc=@{de="Keine Werbung in Settings."; en="No Ads in Settings."} },
    @{ Id="Tel_Inventory"; Name=@{de="Inventar-Sammlung blockieren"; en="Block Inventory Collector"}; Desc=@{de="Programm-Liste nicht senden."; en="Don't send app list."} },
    @{ Id="Tel_Sample"; Name=@{de="Defender: Cloud-Upload blockieren"; en="Defender: Block Cloud Upload"}; Desc=@{de="Kein Upload verdächtiger Dateien."; en="No suspicious file upload."} },
    @{ Id="Tel_GameDVR"; Name=@{de="Game DVR (Aufnahme) aus"; en="Disable Game DVR Recording"}; Desc=@{de="Hintergrundaufnahme aus."; en="Bg recording off."} },
    @{ Id="Tel_CEIP"; Name=@{de="CEIP (Customer Exp.) aus"; en="Disable CEIP Program"}; Desc=@{de="Kundenzufriedenheitsprogramm aus."; en="CEIP off."} },
    @{ Id="Tel_Spotlight"; Name=@{de="Sperrbildschirm Spotlight aus"; en="Disable LockScreen Spotlight"}; Desc=@{de="Kein Bing auf Lockscreen."; en="No Bing on Lockscreen."} },
    @{ Id="Tel_MeetNow"; Name=@{de="Taskleiste: 'Besprechung jetzt' aus"; en="Taskbar: Hide 'Meet Now'"}; Desc=@{de="Kamera-Icon weg."; en="Camera Icon gone."} },
    @{ Id="Tel_News"; Name=@{de="Taskleiste: 'Nachrichten' (Widgets) aus"; en="Taskbar: Hide 'News and Interests'"}; Desc=@{de="Wetter/News weg."; en="Weather/News gone."} },
    @{ Id="Tel_Copilot"; Name=@{de="Windows Copilot (KI) deaktivieren"; en="Disable Windows Copilot (AI)"}; Desc=@{de="KI Assistent weg."; en="AI Assistant gone."} },
    @{ Id="Tel_ErrorReport"; Name=@{de="Fehlerberichterstattung (WER) aus"; en="Disable Error Reporting (WER)"}; Desc=@{de="Keine Absturzberichte."; en="No crash reports."} },
    @{ Id="Tel_Speech"; Name=@{de="Online-Spracherkennung aus"; en="Disable Online Speech Rec."}; Desc=@{de="Keine Cloud-Sprachanalyse."; en="No cloud speech analysis."} },
    @{ Id="Tel_SharedExp"; Name=@{de="'Gemeinsame Nutzung' aus"; en="Disable Shared Experiences"}; Desc=@{de="Kein Cross-Device."; en="No Cross-Device."} }
)

# =============================================================================
# 4. LOGIK & FUNKTIONEN
# =============================================================================

function Refresh-App-Cache {
    Write-Host "Scanne System..." -ForegroundColor Gray
    try { $global:InstalledAppsCache = Get-AppxPackage -AllUsers -ErrorAction SilentlyContinue } catch {}
}

function Is-App-Installed($pattern) {
    # TRUE CHECK für OneDrive
    if ($pattern -eq "*OneDrive*") { 
        return (Get-Process "OneDrive" -ErrorAction SilentlyContinue) -or (Test-Path "$env:LOCALAPPDATA\Microsoft\OneDrive\OneDrive.exe") -or (Test-Path "$env:SystemRoot\SysWOW64\OneDrive.exe")
    }
    # TRUE CHECK für Teams (Sowohl App als auch MSI)
    if ($pattern -eq "*MicrosoftTeams*") { 
        $msi = Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq "Teams Machine-Wide Installer"}
        $exeUser = Test-Path "$env:LOCALAPPDATA\Microsoft\Teams\current\Teams.exe"
        $appx = Get-AppxPackage -AllUsers -Name "*Teams*"
        if ($msi -or $exeUser -or $appx) { return $true } else { return $false }
    }

    # Standard Appx Check
    if (-not $global:InstalledAppsCache) { return $false }
    $found = $global:InstalledAppsCache | Where-Object { $_.Name -like $pattern }
    if ($found) { return $true } else { return $false }
}

function Is-Privacy-Protected($id) {
    try {
        switch ($id) {
            "Tel_Basic" { 
                $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" "AllowTelemetry" -ErrorAction SilentlyContinue; 
                $svc = Get-Service "DiagTrack" -ErrorAction SilentlyContinue
                return ($v.AllowTelemetry -eq 0) -and ($svc.StartType -eq 'Disabled')
            }
            "Tel_AdID" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo" "Enabled" -ErrorAction SilentlyContinue; return ($v.Enabled -eq 0) }
            "Tel_Consumer" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" "DisableWindowsConsumerFeatures" -ErrorAction SilentlyContinue; return ($v.DisableWindowsConsumerFeatures -eq 1) }
            "Tel_BingStart" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" "DisableWebSearch" -ErrorAction SilentlyContinue; return ($v.DisableWebSearch -eq 1) }
            "Tel_Loc" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\LocationAndSensors" "DisableLocation" -ErrorAction SilentlyContinue; return ($v.DisableLocation -eq 1) }
            "Tel_WifiShare" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config" "AutoConnectAllowedOEM" -ErrorAction SilentlyContinue; return ($v.AutoConnectAllowedOEM -eq 0) }
            "Tel_Activity" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "PublishUserActivities" -ErrorAction SilentlyContinue; return ($v.PublishUserActivities -eq 0) }
            "Tel_Clip" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "AllowCrossDeviceClipboard" -ErrorAction SilentlyContinue; return ($v.AllowCrossDeviceClipboard -eq 0) }
            "Tel_Ink"  { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\InputPersonalization" "AllowInputPersonalization" -ErrorAction SilentlyContinue; return ($v.AllowInputPersonalization -eq 0) }
            "Tel_Feed" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" "DoNotShowFeedbackNotifications" -ErrorAction SilentlyContinue; return ($v.DoNotShowFeedbackNotifications -eq 1) }
            "Tel_WUDO" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization" "DODownloadMode" -ErrorAction SilentlyContinue; return ($v.DODownloadMode -eq 0) }
            "Tel_Exp"  { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" "DisableTailoredExperiencesWithDiagnosticData" -ErrorAction SilentlyContinue; return ($v.DisableTailoredExperiencesWithDiagnosticData -eq 1) }
            "Tel_AppLaunch" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\EdgeUI" "DisableMFUTracking" -ErrorAction SilentlyContinue; return ($v.DisableMFUTracking -eq 1) }
            "Tel_Sync"      { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\SettingSync" "DisableSettingSync" -ErrorAction SilentlyContinue; return ($v.DisableSettingSync -eq 2) }
            "Tel_SettingsAds" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" "DisableSoftLanding" -ErrorAction SilentlyContinue; return ($v.DisableSoftLanding -eq 1) }
            "Tel_Inventory" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat" "DisableInventory" -ErrorAction SilentlyContinue; return ($v.DisableInventory -eq 1) }
            "Tel_Sample" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender\Spynet" "SubmitSamplesConsent" -ErrorAction SilentlyContinue; return ($v.SubmitSamplesConsent -eq 2) }
            "Tel_GameDVR" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR" "AllowGameDVR" -ErrorAction SilentlyContinue; return ($v.AllowGameDVR -eq 0) }
            "Tel_CEIP"    { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows" "CEIPEnable" -ErrorAction SilentlyContinue; return ($v.CEIPEnable -eq 0) }
            "Tel_Spotlight" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" "DisableWindowsSpotlightFeatures" -ErrorAction SilentlyContinue; return ($v.DisableWindowsSpotlightFeatures -eq 1) }
            "Tel_MeetNow" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" "HideSCAMeetNow" -ErrorAction SilentlyContinue; return ($v.HideSCAMeetNow -eq 1) }
            "Tel_News"    { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" "EnableFeeds" -ErrorAction SilentlyContinue; return ($v.EnableFeeds -eq 0) }
            "Tel_Copilot" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsCopilot" "TurnOffWindowsCopilot" -ErrorAction SilentlyContinue; return ($v.TurnOffWindowsCopilot -eq 1) }
            "Tel_ErrorReport" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting" "Disabled" -ErrorAction SilentlyContinue; return ($v.Disabled -eq 1) }
            "Tel_Speech" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\InputPersonalization" "AllowInputPersonalization" -ErrorAction SilentlyContinue; return ($v.AllowInputPersonalization -eq 0) }
            "Tel_SharedExp" { $v = Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "EnableCdp" -ErrorAction SilentlyContinue; return ($v.EnableCdp -eq 0) }
        }
    } catch { return $false }
    return $false
}

function Update-UI-Smart {
    Refresh-App-Cache
    $hideClean = $cbHideClean.Checked

    # Update Apps List
    if ($panelApps) {
        foreach ($row in $panelApps.Controls) {
            $cb = $row.Controls[0]; $lbl = $row.Controls[2]
            if (Is-App-Installed $cb.Tag) {
                $lbl.Text = Get-Text 'StatInst'; $lbl.ForeColor = "Red"; $cb.Checked = $true
                $row.Visible = $true
            } else {
                $lbl.Text = Get-Text 'StatClean'; $lbl.ForeColor = "DarkGreen"; $cb.Checked = $false
                if ($hideClean) { $row.Visible = $false } else { $row.Visible = $true }
            }
        }
    }

    # Update Privacy List
    if ($panelPriv) {
        foreach ($row in $panelPriv.Controls) {
            $cb = $row.Controls[0]; $lbl = $row.Controls[2]
            if (Is-Privacy-Protected $cb.Tag) {
                $lbl.Text = Get-Text 'StatProt'; $lbl.ForeColor = "DarkGreen"; $cb.Checked = $false
                if ($hideClean) { $row.Visible = $false } else { $row.Visible = $true }
            } else {
                $lbl.Text = Get-Text 'StatOpen'; $lbl.ForeColor = "Red"; $cb.Checked = $true
                $row.Visible = $true
            }
        }
    }
}

function Stop-And-Disable-Service($name) {
    try {
        if (Get-Service $name -ErrorAction SilentlyContinue) {
            Stop-Service $name -Force -ErrorAction SilentlyContinue
            Set-Service $name -StartupType Disabled -ErrorAction SilentlyContinue
        }
    } catch {}
}

function Kill-Process-ByName($name) {
    Get-Process | Where-Object {$_.ProcessName -like "*$name*"} | ForEach-Object { Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue }
}

function Uninstall-Teams-Hardcore {
    Write-Host "  > Teams Vernichtung..." -ForegroundColor Red
    Kill-Process-ByName "Teams"; Kill-Process-ByName "msteams"
    
    # MSI Remove
    try {
        $msi = Get-WmiObject -Class Win32_Product | Where-Object {$_.Name -eq "Teams Machine-Wide Installer"}
        if ($msi) { $msi.Uninstall() | Out-Null }
    } catch {}

    # Appx Remove
    Get-AppxPackage -AllUsers -Name "*Teams*" | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
    Get-AppxPackage -Name "*Teams*" | Remove-AppxPackage -ErrorAction SilentlyContinue
    
    # Folders
    $folders = @("$env:LOCALAPPDATA\Microsoft\Teams", "$env:APPDATA\Microsoft\Teams", "$env:ProgramData\Microsoft\Teams")
    foreach ($f in $folders) { if (Test-Path $f) { Remove-Item $f -Recurse -Force -ErrorAction SilentlyContinue } }
}

function Uninstall-OneDrive-Hardcore {
    Write-Host "  > OneDrive Vernichtung..." -ForegroundColor Red
    Kill-Process-ByName "OneDrive"
    $paths = @("$env:SystemRoot\SysWOW64\OneDriveSetup.exe", "$env:SystemRoot\System32\OneDriveSetup.exe", "$env:LOCALAPPDATA\Microsoft\OneDrive\Update\OneDriveSetup.exe")
    foreach ($p in $paths) {
        if (Test-Path $p) {
            Start-Process -FilePath $p -ArgumentList "/uninstall" -Wait -NoNewWindow
            Start-Sleep -Seconds 2
            return
        }
    }
}

function Start-Cleaning {
    $btnStart.Enabled = $false; $btnStart.Text = Get-Text 'LogRestore'; $form.Cursor = [System.Windows.Forms.Cursors]::WaitCursor
    try { Checkpoint-Computer -Description "tmCleaner Backup" -RestorePointType "MODIFY_SETTINGS" -ErrorAction Stop } catch {}
    $btnStart.Text = Get-Text 'BtnWork'

    foreach ($row in $panelApps.Controls) {
        $cb = $row.Controls[0]
        if ($cb.Checked) {
            Write-Host "Bearbeite: $($cb.Tag)" -ForegroundColor Yellow
            try {
                if ($cb.Tag -eq "*OneDrive*") { Uninstall-OneDrive-Hardcore }
                elseif ($cb.Tag -eq "*MicrosoftTeams*") { Uninstall-Teams-Hardcore }
                else {
                    $cleanName = $cb.Tag.Replace("*",""); Kill-Process-ByName $cleanName
                    Get-AppxPackage -AllUsers -Name $cb.Tag | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
                    Get-AppxPackage -Name $cb.Tag | Remove-AppxPackage -ErrorAction SilentlyContinue
                    
                    $prov = Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -like $cb.Tag}
                    if ($prov) { Remove-AppxProvisionedPackage -Online -PackageName $prov.PackageName -ErrorAction SilentlyContinue | Out-Null }
                }
                if ($cb.Tag -eq "*Xbox*") { Stop-And-Disable-Service "XblAuthManager"; Stop-And-Disable-Service "XblGameSave"; Stop-And-Disable-Service "XboxNetApiSvc"; Stop-And-Disable-Service "XboxGipSvc" }
            } catch {}
        }
    }

    foreach ($row in $panelPriv.Controls) {
        $cb = $row.Controls[0]
        if ($cb.Checked) {
            try {
                switch ($cb.Tag) {
                    "Tel_Basic" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "AllowTelemetry" 0 -Force; Stop-And-Disable-Service "DiagTrack"; Stop-And-Disable-Service "dmwappushservice" }
                    "Tel_AdID" { $p="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "Enabled" 0 -Force }
                    "Tel_Consumer" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableWindowsConsumerFeatures" 1 -Force }
                    "Tel_BingStart" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableWebSearch" 1 -Force }
                    "Tel_Loc" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\LocationAndSensors"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableLocation" 1 -Force }
                    "Tel_WifiShare" { $p="HKLM:\SOFTWARE\Microsoft\WcmSvc\wifinetworkmanager\config"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "AutoConnectAllowedOEM" 0 -Force }
                    "Tel_Activity" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "PublishUserActivities" 0 -Force }
                    "Tel_Clip" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "AllowCrossDeviceClipboard" 0 -Force }
                    "Tel_Ink"  { $p="HKLM:\SOFTWARE\Policies\Microsoft\InputPersonalization"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "AllowInputPersonalization" 0 -Force }
                    "Tel_Feed" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DoNotShowFeedbackNotifications" 1 -Force }
                    "Tel_WUDO" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DODownloadMode" 0 -Force }
                    "Tel_Exp"  { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableTailoredExperiencesWithDiagnosticData" 1 -Force }
                    "Tel_AppLaunch" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\EdgeUI"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableMFUTracking" 1 -Force }
                    "Tel_Sync"      { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\SettingSync"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableSettingSync" 2 -Force; Set-ItemProperty $p "DisableSettingSyncUserOverride" 1 -Force }
                    "Tel_SettingsAds" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableSoftLanding" 1 -Force }
                    "Tel_Inventory" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableInventory" 1 -Force }
                    "Tel_Sample" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender\Spynet"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "SubmitSamplesConsent" 2 -Force }
                    "Tel_GameDVR" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "AllowGameDVR" 0 -Force }
                    "Tel_CEIP"    { $p="HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "CEIPEnable" 0 -Force }
                    "Tel_Spotlight" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "DisableWindowsSpotlightFeatures" 1 -Force }
                    "Tel_MeetNow" { $p="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "HideSCAMeetNow" 1 -Force }
                    "Tel_News"    { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "EnableFeeds" 0 -Force }
                    "Tel_Copilot" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsCopilot"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "TurnOffWindowsCopilot" 1 -Force }
                    "Tel_ErrorReport" { $p="HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "Disabled" 1 -Force }
                    "Tel_Speech" { $p="HKLM:\SOFTWARE\Policies\Microsoft\InputPersonalization"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "AllowInputPersonalization" 0 -Force }
                    "Tel_SharedExp" { $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"; if(!(Test-Path $p)){New-Item $p -Force|Out-Null}; Set-ItemProperty $p "EnableCdp" 0 -Force }
                }
            } catch {}
        }
    }

    Update-UI-Smart
    $form.Cursor = [System.Windows.Forms.Cursors]::Default
    $btnStart.Text = Get-Text 'BtnDone'
    Start-Sleep -Seconds 1
    $btnStart.Text = Get-Text 'BtnStart'
    $btnStart.Enabled = $true
    [System.Windows.Forms.MessageBox]::Show((Get-Text 'MsgDone'), "tmCleaner", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
}

function Restore-Apps {
    if ([System.Windows.Forms.MessageBox]::Show((Get-Text 'MsgRestApp'), "Restore", "YesNo") -eq "Yes") {
        $form.Cursor = "WaitCursor"
        try { Get-AppxPackage -AllUsers | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppxManifest.xml" -ErrorAction SilentlyContinue} } catch {}
        Update-UI-Smart
        $form.Cursor = "Default"
    }
}

function Restore-Privacy {
    if ([System.Windows.Forms.MessageBox]::Show((Get-Text 'MsgRestPriv'), "Restore", "YesNo") -eq "Yes") {
        try {
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection"; if(Test-Path $p){ Remove-ItemProperty $p "AllowTelemetry" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "DoNotShowFeedbackNotifications" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AdvertisingInfo"; if(Test-Path $p){ Set-ItemProperty $p "Enabled" 1 -Force }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent"; if(Test-Path $p){ Remove-ItemProperty $p "DisableWindowsConsumerFeatures" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "DisableTailoredExperiencesWithDiagnosticData" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "DisableSoftLanding" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "DisableWindowsSpotlightFeatures" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search"; if(Test-Path $p){ Remove-ItemProperty $p "DisableWebSearch" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\LocationAndSensors"; if(Test-Path $p){ Remove-ItemProperty $p "DisableLocation" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\System"; if(Test-Path $p){ Remove-ItemProperty $p "AllowCrossDeviceClipboard" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "PublishUserActivities" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "EnableCdp" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\InputPersonalization"; if(Test-Path $p){ Remove-ItemProperty $p "AllowInputPersonalization" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization"; if(Test-Path $p){ Remove-ItemProperty $p "DODownloadMode" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\EdgeUI"; if(Test-Path $p){ Remove-ItemProperty $p "DisableMFUTracking" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\SettingSync"; if(Test-Path $p){ Remove-ItemProperty $p "DisableSettingSync" -ErrorAction SilentlyContinue; Remove-ItemProperty $p "DisableSettingSyncUserOverride" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat"; if(Test-Path $p){ Remove-ItemProperty $p "DisableInventory" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender\Spynet"; if(Test-Path $p){ Remove-ItemProperty $p "SubmitSamplesConsent" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR"; if(Test-Path $p){ Remove-ItemProperty $p "AllowGameDVR" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows"; if(Test-Path $p){ Remove-ItemProperty $p "CEIPEnable" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer"; if(Test-Path $p){ Remove-ItemProperty $p "HideSCAMeetNow" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds"; if(Test-Path $p){ Remove-ItemProperty $p "EnableFeeds" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsCopilot"; if(Test-Path $p){ Remove-ItemProperty $p "TurnOffWindowsCopilot" -ErrorAction SilentlyContinue }
            $p="HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting"; if(Test-Path $p){ Remove-ItemProperty $p "Disabled" -ErrorAction SilentlyContinue }
        } catch {}
        Update-UI-Smart
    }
}

# --- GUI HELPER ---

function Create-Smart-Row($targetPanel, $dataSource) {
    foreach ($item in $dataSource) {
        $row = New-Object System.Windows.Forms.Panel; $row.Size = New-Object System.Drawing.Size(700, 75)
        $displayName = $item.Name; $displayDesc = $item.Desc
        if ($item.Name.GetType().Name -eq "Hashtable") { $displayName = $item.Name[$sysLang]; $displayDesc = $item.Desc[$sysLang] }

        $cb = New-Object System.Windows.Forms.CheckBox; $cb.Text = $displayName; $cb.Tag = $item.Id; $cb.AutoSize = $true
        $cb.Location = New-Object System.Drawing.Point(5, 2); $cb.Font = New-Object System.Drawing.Font("Segoe UI", 10, [System.Drawing.FontStyle]::Bold)
        
        $lblDesc = New-Object System.Windows.Forms.Label; $lblDesc.Text = $displayDesc
        $lblDesc.Location = New-Object System.Drawing.Point(25, 32); $lblDesc.AutoSize = $true; $lblDesc.Font = New-Object System.Drawing.Font("Segoe UI", 8); $lblDesc.ForeColor = "Gray"; $lblDesc.BringToFront()

        $lbl = New-Object System.Windows.Forms.Label; $lbl.Text = Get-Text 'StatCheck'; $lbl.Location = New-Object System.Drawing.Point(450, 7)
        $lbl.Size = New-Object System.Drawing.Size(200, 20); $lbl.Font = New-Object System.Drawing.Font("Segoe UI", 9, [System.Drawing.FontStyle]::Bold)
        
        $row.Controls.Add($cb); $row.Controls.Add($lblDesc); $row.Controls.Add($lbl); $targetPanel.Controls.Add($row)
    }
}

function Select-All-Current {
    $currentPanel = $tabControl.SelectedTab.Controls[0].Controls[0]
    foreach ($row in $currentPanel.Controls) { if($row.Visible) { $row.Controls[0].Checked = $true } }
}

# =============================================================================
# 5. GUI ERSTELLUNG
# =============================================================================

$form = New-Object System.Windows.Forms.Form; $form.Text = Get-Text 'Title'; $form.Size = New-Object System.Drawing.Size(850, 700); $form.StartPosition = "CenterScreen"; $form.FormBorderStyle = "FixedDialog"; $form.MaximizeBox = $false; $form.Add_Shown({ Update-UI-Smart })
$tabControl = New-Object System.Windows.Forms.TabControl; $tabControl.Location = New-Object System.Drawing.Point(20, 15); $tabControl.Size = New-Object System.Drawing.Size(790, 535)

# TAB 1
$tab1 = New-Object System.Windows.Forms.TabPage; $tab1.Text = Get-Text 'TabApps'; $tab1.UseVisualStyleBackColor = $true
$container1 = New-Object System.Windows.Forms.Panel; $container1.Dock = "Fill"
$panelApps = New-Object System.Windows.Forms.FlowLayoutPanel; $panelApps.Dock = "Fill"; $panelApps.FlowDirection = "TopDown"; $panelApps.AutoScroll = $true; $panelApps.WrapContents = $false
Create-Smart-Row -targetPanel $panelApps -dataSource $appsData
$pnlRest1 = New-Object System.Windows.Forms.Panel; $pnlRest1.Dock = "Bottom"; $pnlRest1.Height = 50; $pnlRest1.BackColor = "WhiteSmoke"
$btnRestApps = New-Object System.Windows.Forms.Button; $btnRestApps.Text = Get-Text 'BtnRestApps'; $btnRestApps.Size = New-Object System.Drawing.Size(250, 30); $btnRestApps.Location = New-Object System.Drawing.Point(10, 10); $btnRestApps.ForeColor = "DarkRed"; $btnRestApps.Add_Click({ Restore-Apps })
$pnlRest1.Controls.Add($btnRestApps)
$container1.Controls.Add($panelApps); $container1.Controls.Add($pnlRest1); $tab1.Controls.Add($container1); $tabControl.Controls.Add($tab1)

# TAB 2
$tab2 = New-Object System.Windows.Forms.TabPage; $tab2.Text = Get-Text 'TabPriv'; $tab2.UseVisualStyleBackColor = $true
$container2 = New-Object System.Windows.Forms.Panel; $container2.Dock = "Fill"
$panelPriv = New-Object System.Windows.Forms.FlowLayoutPanel; $panelPriv.Dock = "Fill"; $panelPriv.FlowDirection = "TopDown"; $panelPriv.AutoScroll = $true; $panelPriv.WrapContents = $false
Create-Smart-Row -targetPanel $panelPriv -dataSource $privacyData
$pnlRest2 = New-Object System.Windows.Forms.Panel; $pnlRest2.Dock = "Bottom"; $pnlRest2.Height = 50; $pnlRest2.BackColor = "WhiteSmoke"
$btnRestPriv = New-Object System.Windows.Forms.Button; $btnRestPriv.Text = Get-Text 'BtnRestPriv'; $btnRestPriv.Size = New-Object System.Drawing.Size(250, 30); $btnRestPriv.Location = New-Object System.Drawing.Point(10, 10); $btnRestPriv.ForeColor = "DarkRed"; $btnRestPriv.Add_Click({ Restore-Privacy })
$pnlRest2.Controls.Add($btnRestPriv)
$container2.Controls.Add($panelPriv); $container2.Controls.Add($pnlRest2); $tab2.Controls.Add($container2); $tabControl.Controls.Add($tab2)

$form.Controls.Add($tabControl)

# CONTROLS
$cbHideClean = New-Object System.Windows.Forms.CheckBox; $cbHideClean.Text = Get-Text 'ChkHideClean'; $cbHideClean.Location = New-Object System.Drawing.Point(20, 560); $cbHideClean.AutoSize = $true; $cbHideClean.Checked = $true; $cbHideClean.Add_CheckedChanged({ Update-UI-Smart }); $form.Controls.Add($cbHideClean)
$btnSelAll = New-Object System.Windows.Forms.Button; $btnSelAll.Text = Get-Text 'BtnSelAll'; $btnSelAll.Location = New-Object System.Drawing.Point(20, 590); $btnSelAll.Size = New-Object System.Drawing.Size(250, 30); $btnSelAll.Add_Click({ Select-All-Current }); $form.Controls.Add($btnSelAll)
$btnStart = New-Object System.Windows.Forms.Button; $btnStart.Text = Get-Text 'BtnStart'; $btnStart.Font = New-Object System.Drawing.Font("Segoe UI", 11, [System.Drawing.FontStyle]::Bold); $btnStart.BackColor = "LightBlue"; $btnStart.Location = New-Object System.Drawing.Point(360, 560); $btnStart.Size = New-Object System.Drawing.Size(400, 50); $btnStart.Add_Click({ Start-Cleaning }); $form.Controls.Add($btnStart)

$form.ShowDialog() | Out-Null