Crmgo Blog

Optimierung eines alten PCs: Media Center für den Fernseher auf Windows 10

Optimierung eines alten PCs: Media Center für den Fernseher auf Windows 10

Windows 10 auf einem schwachen PC (E1-2100, 4 GB, HDD) für die Filmbetrachtung auf dem TV optimieren: Skript Optimize-MoviePC.ps1, Rollback über -Restore und Browsereinstellungen.

Optimierung eines alten PCs: Media Center für den Fernseher auf Windows 10

Ein alter Laptop oder ein Systemblock verstaubt ungenutzt? Man kann ihn in ein einfaches Media-Center für den Fernseher verwandeln: Filme, YouTube und Online-Kinos über HDMI. Das Hauptproblem ist die schwache Hardware: Windows 10 belastet Prozessor, Arbeitsspeicher und Festplatte mit Hintergrundaufgaben, und das Video beginnt zu ruckeln. In diesem Artikel schauen wir uns an, wie man Windows 10 für das Ansehen von Filmen mit dem PowerShell-Skript Optimize-MoviePC.ps1 erleichtert und wie man den Browser einrichtet, damit ein alter Computer als Media-Center ohne Aussetzer läuft.

Für wen das gedacht ist

Das Skript wurde für einen sehr schwachen PC entwickelt: Prozessor AMD E1-2100 (2 Kerne, 1,0 GHz), Grafikeinheit Radeon HD 8210, 4 GB Arbeitsspeicher und eine gewöhnliche Festplatte (HDD). Wenn Sie eine ähnliche Konfiguration haben und Videos auf YouTube selbst in niedriger Qualität ruckeln, ist das Ihr Fall. Das Ziel: WLAN, Browser und Videowiedergabe erhalten und alles im Hintergrund abschalten, wodurch das Bild einfriert.

Wichtig: Das Skript wurde nicht auf einem realen Rechner des Autors des Artikels getestet. Es funktioniert nur unter Windows 10, erfordert PowerShell 5.1 und Administratorrechte. Vor dem Start erstellt es selbst Sicherungskopien, aber verwenden Sie es bewusst und auf eigenes Risiko.

Was das Skript macht

Zuerst – Sicherungskopien

  • Erstellt einen Systemwiederherstellungspunkt (falls Windows dies zulässt).
  • Erstellt einen Ordner backup\ neben dem Skript: eine Liste der Dienstzustände services-before.csv, Exporte der benötigten Registrierungsbereiche (.reg) und ein Protokoll last-run.log.

Dienste

  • Deaktiviert Telemetrie und Diagnose (DiagTrack, WerSvc, DPS u. a.), Drucken und Fax (Spooler), Remotezugriff (RDP, RemoteRegistry, WinRM), Xbox, Standort, Sensoren, Smartcards und Biometrie, Netzwerkerkennung und Freigabe (SSDP, UPnP, LanmanServer), Suchindizierung (WSearch), SysMain/Superfetch, Hyper-V und viele Hintergrund-Benutzerdienste.
  • Windows Update-Dienste werden in den manuellen Modus versetzt (nicht deaktiviert): Benachrichtigung vor dem Download, ohne automatischen Neustart bei angemeldetem Benutzer; Delivery Optimization wird ausgeschaltet.
  • Netzwerk und WLAN, Sound (einschließlich MMCSS), Bluetooth, wichtige Windows-Dienste und der Schutz (Defender, Firewall) werden zwangsweise eingeschaltet gelassen.

Aufgabenplanung, Oberfläche, Werbung

  • Deaktiviert Hintergrundaufgaben: Kompatibilitätsbewertung, CEIP, Feedback, Karten, Fehlerberichte, WinSAT, Familien-Sicherheit usw.
  • Visuelle Effekte – „Beste Leistung": ohne Animationen, Transparenz und Aero Peek (ClearType bleibt erhalten). Schaltet Benachrichtigungen und „Nachrichten und Interessen" aus.
  • Deaktiviert Tipps, Werbe-ID, Bing/Cortana in der Suche, Telemetrie, Aktivitätsverlauf und Game DVR.

Arbeitsspeicher, Festplatte, Energie

  • Schaltet Speicherkomprimierung und Seitenzusammenführung, Prefetch/Superfetch aus; legt eine feste Auslagerungsdatei von 6 GB fest (4 GB bei Platzmangel); deaktiviert Ruhezustand und Schnellstart.
  • Aktiviert den Plan „Hohe Leistung": ohne Ruhezustand und Festplattenabschaltung, Prozessor 100 %, WLAN-Adapter auf maximaler Leistung, ohne selektive USB-Aussetzung; Monitor schaltet sich nach 20 Minuten aus (im Netzbetrieb).
  • Erhöht die Multimedia-Priorität (MMCSS) für Sound und Wiedergabe.

Autostart und Defender

  • Autostart-Einträge werden als deaktiviert markiert (nicht gelöscht), Verknüpfungen aus dem Ordner „Autostart" werden nach backup\startup-shortcuts verschoben. OneDrive wird gestoppt, die Synchronisierung per Richtlinie deaktiviert – Dateien werden nicht gelöscht.
  • Defender bleibt aktiviert, aber mit niedriger Priorität (Auslastung beim Scannen 5 %); zu den Ausnahmen werden nur die Cache-Ordner der Browser hinzugefügt.

Am Ende zeigt das Skript eine Zusammenfassung, erinnert an einen Neustart, empfiehlt, einmal im Monat defrag C: /O auszuführen, und gibt Empfehlungen zum Browser.

Was das Skript NICHT anfasst

  • Ihre Dokumente, Fotos, Downloads und Browserprofile.
  • Treiber, Windows Defender und Firewall.
  • WLAN, DHCP, DNS, Sound und Bluetooth.
  • Windows Update (wird nur in den manuellen Modus versetzt), den Defragmentierungsdienst, RunOnce.
  • Löscht keine Registrierungswerte und startet den Computer niemals selbst neu.

So starten Sie es: Schritt für Schritt

  1. Legen Sie Optimize-MoviePC.ps1 in einen separaten Ordner. Ein Doppelklick auf die Datei funktioniert nicht.
  2. Öffnen Sie Windows PowerShell als Administrator (Start → Rechtsklick auf PowerShell → „Als Administrator ausführen").
  3. Erlauben Sie die Skriptausführung nur für das aktuelle Fenster:
    Set-ExecutionPolicy -Scope Process Bypass -Force
  4. Wechseln Sie in den Ordner mit dem Skript (falls der Pfad Leerzeichen enthält – in Anführungszeichen setzen):
    cd "C:\Pfad\zum\Ordner"
  5. Starten Sie:
    .\Optimize-MoviePC.ps1
  6. Warten Sie auf die Zusammenfassung und starten Sie den Computer neu, wenn Sie gerade keinen Film schauen.

⬇ Optimize-MoviePC.ps1 herunterladen

Vollständigen Code von Optimize-MoviePC.ps1 anzeigen
#Requires -Version 5.1
# =============================================================================
# RUN AS ADMINISTRATOR.
# Запускать от имени администратора.
#
# Правый клик по «Windows PowerShell» -> «Запуск от имени администратора», затем:
#   Set-ExecutionPolicy -Scope Process Bypass -Force
#   cd C:\путь\к\папке
#   .\Optimize-MoviePC.ps1
#
# Откат типов запуска служб и сохранённых веток реестра:
#   .\Optimize-MoviePC.ps1 -Restore
#
# Для чего скрипт
#   Слабый ПК: AMD E1-2100 (2 ядра, 1,0 ГГц, Radeon HD 8210), 4 ГБ RAM, HDD.
#   Нужны только Wi-Fi, браузер и воспроизведение видео.
#
# Чего скрипт НЕ делает
#   - не удаляет документы, фото, загрузки, папку OneDrive и профили браузера;
#   - не трогает драйверы (AMD, Realtek, Wi-Fi и любые другие);
#   - не отключает службы, которых нет в списках ниже;
#   - не отключает Защитник Windows и брандмауэр;
#   - не выключает Wi-Fi, DHCP, DNS, звук и планировщик мультимедиа;
#   - не перезагружает компьютер сам.
#
# Запускайте из той учётной записи, которой смотрите кино, и эта учётка должна
# быть администратором. Иначе личные настройки рабочего стола попадут не в тот профиль.
# Службы (они общие для всего ПК) настраиваются в любом случае.
#
# После выполнения нужна обычная перезагрузка, когда фильм не идёт.
# Рекомендация по браузеру — в конце этого файла и в browser-recommendation.txt.
# =============================================================================

param(
    [switch]$Restore
)

$ErrorActionPreference = "Continue"

if (-not $PSScriptRoot) {
    $PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Path
}

# Имена автозагрузки, которые нельзя гасить: обновления браузера и значок защиты.
$script:StartupKeepPattern = "(?i)(SecurityHealth|WindowsDefender|Windows Defender|Defender|update|updater|Maintenance|MozillaMaintenance)"

$script:DisabledOk = 0
$script:DisabledFail = 0

function Test-IsAdministrator {
    $identity = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = New-Object Security.Principal.WindowsPrincipal($identity)
    return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

function Set-ServiceStartupSafe {
    param(
        [Parameter(Mandatory = $true)][string]$Name,
        [Parameter(Mandatory = $true)][ValidateSet("Automatic", "Manual", "Disabled", "Boot", "System")][string]$StartupType
    )
    try {
        Set-Service -Name $Name -StartupType $StartupType -ErrorAction Stop
        return $true
    }
    catch {
        $map = @{
            Automatic = "auto"
            Manual    = "demand"
            Disabled  = "disabled"
            Boot      = "boot"
            System    = "system"
        }
        & sc.exe config $Name start= $map[$StartupType] | Out-Null
        if ($LASTEXITCODE -eq 0) {
            return $true
        }
        Write-Warning "  Не удалось сменить тип запуска ${Name}: $($_.Exception.Message)"
        return $false
    }
}

function Disable-ExtraService {
    param([Parameter(Mandatory = $true)][string]$Name)

    $found = @(Get-Service -Name $Name -ErrorAction SilentlyContinue | Where-Object { $_ })
    if ($found.Count -eq 0) {
        Write-Host "  [нет такой службы] $Name" -ForegroundColor DarkGray
        return
    }

    foreach ($svc in $found) {
        try {
            if ($svc.Status -ne "Stopped") {
                Stop-Service -Name $svc.Name -Force -ErrorAction SilentlyContinue
            }
            if (Set-ServiceStartupSafe -Name $svc.Name -StartupType Disabled) {
                $script:DisabledOk++
                Write-Host "  [выкл] $($svc.Name)" -ForegroundColor Green
            }
            else {
                $script:DisabledFail++
            }
        }
        catch {
            $script:DisabledFail++
            Write-Warning "  $($svc.Name): $($_.Exception.Message)"
        }
    }
}

function Repair-ServiceIfDisabled {
    param(
        [Parameter(Mandatory = $true)][string]$Name,
        [ValidateSet("Automatic", "Manual")][string]$StartupType = "Automatic",
        [switch]$Start
    )

    try {
        $svc = Get-Service -Name $Name -ErrorAction SilentlyContinue
        if (-not $svc) {
            Write-Host "  [нет такой службы] $Name" -ForegroundColor DarkGray
            return
        }

        if ($svc.StartType -eq "Disabled") {
            if (Set-ServiceStartupSafe -Name $Name -StartupType $StartupType) {
                Write-Host "  [восстановлено] $Name была выключена -> $StartupType" -ForegroundColor Yellow
            }
        }
        else {
            Write-Host "  [оставляем] $Name ($($svc.StartType))" -ForegroundColor Cyan
        }

        if ($Start) {
            $svc = Get-Service -Name $Name -ErrorAction SilentlyContinue
            if ($svc -and $svc.Status -ne "Running" -and $svc.StartType -ne "Disabled") {
                & sc.exe start $Name | Out-Null
                if ($LASTEXITCODE -eq 0 -or $LASTEXITCODE -eq 1056) {
                    Write-Host "  [запуск] $Name" -ForegroundColor Cyan
                }
                else {
                    Write-Warning "  Служба $Name не запустилась (код $LASTEXITCODE). После перезагрузки проверьте звук и Wi-Fi."
                }
            }
        }
    }
    catch {
        Write-Warning "  $Name : $($_.Exception.Message)"
    }
}

function Set-ManualService {
    param([Parameter(Mandatory = $true)][string]$Name)
    $svc = Get-Service -Name $Name -ErrorAction SilentlyContinue
    if (-not $svc) {
        Write-Host "  [нет такой службы] $Name" -ForegroundColor DarkGray
        return
    }
    if (Set-ServiceStartupSafe -Name $Name -StartupType Manual) {
        Write-Host "  [вручную] $Name" -ForegroundColor Green
    }
}

function Set-RegDword {
    param(
        [Parameter(Mandatory = $true)][string]$Path,
        [Parameter(Mandatory = $true)][string]$Name,
        [Parameter(Mandatory = $true)][int]$Value
    )
    if (-not (Test-Path -LiteralPath $Path)) {
        New-Item -Path $Path -Force | Out-Null
    }
    New-ItemProperty -LiteralPath $Path -Name $Name -Value $Value -PropertyType DWord -Force | Out-Null
}

function Set-RegString {
    param(
        [Parameter(Mandatory = $true)][string]$Path,
        [Parameter(Mandatory = $true)][string]$Name,
        [Parameter(Mandatory = $true)][string]$Value
    )
    if (-not (Test-Path -LiteralPath $Path)) {
        New-Item -Path $Path -Force | Out-Null
    }
    New-ItemProperty -LiteralPath $Path -Name $Name -Value $Value -PropertyType String -Force | Out-Null
}

function Export-RegKey {
    param(
        [Parameter(Mandatory = $true)][string]$Key,
        [Parameter(Mandatory = $true)][string]$File
    )
    $full = Join-Path $script:BackupDir $File
    & reg.exe export $Key $full /y 2>&1 | Out-Null
    if ($LASTEXITCODE -eq 0) {
        Write-Host "  [копия реестра] $Key" -ForegroundColor DarkGray
    }
}

function Disable-StartupRunKey {
    param(
        [Parameter(Mandatory = $true)][string]$RunKey,
        [Parameter(Mandatory = $true)][string]$ApprovedKey
    )
    if (-not (Test-Path -LiteralPath $RunKey)) {
        return
    }
    if (-not (Test-Path -LiteralPath $ApprovedKey)) {
        New-Item -Path $ApprovedKey -Force | Out-Null
    }

    $item = Get-Item -LiteralPath $RunKey
    foreach ($valueName in @($item.GetValueNames())) {
        if ([string]::IsNullOrWhiteSpace($valueName)) {
            continue
        }
        if ($valueName -match $script:StartupKeepPattern) {
            Write-Host "  [автозагрузка оставлена] $valueName" -ForegroundColor Cyan
            continue
        }
        # 0x03 в первом байте — «Отключено» в диспетчере задач. Саму команду не удаляем.
        $disabled = [byte[]](0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
        New-ItemProperty -LiteralPath $ApprovedKey -Name $valueName -Value $disabled -PropertyType Binary -Force | Out-Null
        Write-Host "  [автозагрузка выкл] $valueName" -ForegroundColor Green
    }
}

function Suspend-StartupFolder {
    param(
        [Parameter(Mandatory = $true)][string]$SourceFolder,
        [Parameter(Mandatory = $true)][string]$BackupFolder
    )
    if (-not (Test-Path -LiteralPath $SourceFolder)) {
        return
    }
    New-Item -ItemType Directory -Path $BackupFolder -Force | Out-Null
    Get-ChildItem -LiteralPath $SourceFolder -Force | Where-Object { -not $_.PSIsContainer } | ForEach-Object {
        if ($_.Name -eq "desktop.ini") {
            return
        }
        if ($_.Name -match $script:StartupKeepPattern) {
            Write-Host "  [папка автозагрузки оставлена] $($_.Name)" -ForegroundColor Cyan
            return
        }
        Move-Item -LiteralPath $_.FullName -Destination (Join-Path $BackupFolder $_.Name) -Force
        Write-Host "  [ярлык убран в backup] $($_.Name)" -ForegroundColor Green
    }
}

function Restore-StartupFolder {
    param(
        [Parameter(Mandatory = $true)][string]$BackupFolder,
        [Parameter(Mandatory = $true)][string]$SourceFolder
    )
    if (-not (Test-Path -LiteralPath $BackupFolder)) {
        return
    }
    if (-not (Test-Path -LiteralPath $SourceFolder)) {
        New-Item -ItemType Directory -Path $SourceFolder -Force | Out-Null
    }
    Get-ChildItem -LiteralPath $BackupFolder -Force | Where-Object { -not $_.PSIsContainer } | ForEach-Object {
        $dest = Join-Path $SourceFolder $_.Name
        if (Test-Path -LiteralPath $dest) {
            Write-Host "  [ярлык уже на месте] $($_.Name)" -ForegroundColor DarkGray
            return
        }
        Move-Item -LiteralPath $_.FullName -Destination $dest
        Write-Host "  [ярлык возвращён] $($_.Name)" -ForegroundColor Green
    }
}

function Invoke-Restore {
    $backup = Join-Path $PSScriptRoot "backup"
    if (-not (Test-Path -LiteralPath $backup)) {
        Write-Host "Папка backup не найдена. Откатывать нечего." -ForegroundColor Yellow
        Write-Host "Если точка восстановления создалась, откройте: Панель управления -> Восстановление -> Запуск восстановления системы."
        return
    }

    Write-Host "Возвращаем типы запуска служб из backup\services-before.csv ..." -ForegroundColor Cyan
    $csv = Join-Path $backup "services-before.csv"
    if (Test-Path -LiteralPath $csv) {
        $rows = Import-Csv -LiteralPath $csv
        foreach ($row in $rows) {
            $type = switch ($row.StartMode) {
                "Auto" { "Automatic" }
                "Manual" { "Manual" }
                "Disabled" { "Disabled" }
                "Boot" { "Boot" }
                "System" { "System" }
                default { $null }
            }
            if (-not $type -or [string]::IsNullOrWhiteSpace($row.Name)) {
                continue
            }
            if (Set-ServiceStartupSafe -Name $row.Name -StartupType $type) {
                Write-Host "  [служба] $($row.Name) -> $type" -ForegroundColor DarkGray
            }
        }
    }
    else {
        Write-Warning "Файл services-before.csv не найден. Типы запуска служб не восстановлены."
    }

    Write-Host "Возвращаем сохранённые ветки реестра ..." -ForegroundColor Cyan
    Get-ChildItem -LiteralPath $backup -Filter "*.reg" -ErrorAction SilentlyContinue | ForEach-Object {
        & reg.exe import $_.FullName | Out-Null
        if ($LASTEXITCODE -eq 0) {
            Write-Host "  [реестр] $($_.Name)" -ForegroundColor DarkGray
        }
        else {
            Write-Warning "  Не удалось импортировать $($_.Name)"
        }
    }

    $userStartup = [Environment]::GetFolderPath("Startup")
    $commonStartup = Join-Path $env:ProgramData "Microsoft\Windows\Start Menu\Programs\Startup"
    Restore-StartupFolder -BackupFolder (Join-Path $backup "startup-shortcuts\user") -SourceFolder $userStartup
    Restore-StartupFolder -BackupFolder (Join-Path $backup "startup-shortcuts\common") -SourceFolder $commonStartup

    Write-Host ""
    Write-Host "Откат служб, реестра и ярлыков автозагрузки выполнен." -ForegroundColor Green
    Write-Host "Сжатие памяти этим откатом не включается. Если нужно вернуть его:" -ForegroundColor Yellow
    Write-Host "  Enable-MMAgent -MemoryCompression -PageCombining"
    Write-Host "Гибернация этим откатом не включается. Если нужно вернуть её: powercfg -h on"
    Write-Host "Перезагрузите компьютер."
}

function Set-FixedPageFile {
    # Фиксированный файл подкачки не разрастается посреди фильма.
    # Рост pagefile.sys на HDD — это длинная пауза картинки.
    # Размер не больше 6144 МБ: на почти полном диске файл не трогаем.
    $mmPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"
    $pageName = "$env:SystemDrive\pagefile.sys"

    $freeMb = 0
    $disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='$env:SystemDrive'" -ErrorAction SilentlyContinue
    if ($disk) {
        $freeMb = [int64]($disk.FreeSpace / 1MB)
    }

    $existingMb = 0
    $settingsPreview = @(Get-CimInstance Win32_PageFileSetting -ErrorAction SilentlyContinue | Where-Object { $_ })
    foreach ($entry in $settingsPreview) {
        $current = 0
        if ($entry.InitialSize) { $current = [int]$entry.InitialSize }
        if ($current -gt $existingMb) { $existingMb = $current }
    }

    $targetMb = 0
    $growTo6144 = 6144 - $existingMb
    if ($growTo6144 -lt 0) { $growTo6144 = 0 }
    $growTo4096 = 4096 - $existingMb
    if ($growTo4096 -lt 0) { $growTo4096 = 0 }

    if ($freeMb -ge ($growTo6144 + 2048)) {
        $targetMb = 6144
    }
    elseif ($freeMb -ge ($growTo4096 + 1536)) {
        $targetMb = 4096
    }
    elseif ($existingMb -ge 2048 -and $existingMb -le 6144) {
        $targetMb = $existingMb
        Write-Host "  Мало свободного места ($freeMb МБ). Фиксируем уже существующий файл подкачки: $targetMb МБ." -ForegroundColor Yellow
    }
    else {
        Write-Warning "  На диске $($env:SystemDrive) свободно около $freeMb МБ. Файл подкачки не меняем, чтобы не забить диск."
        return
    }

    $pageSpec = "$pageName $targetMb $targetMb"
    $previousAuto = $true
    $previousFiles = $null
    try {
        $previousFiles = (Get-ItemProperty -LiteralPath $mmPath -Name PagingFiles -ErrorAction SilentlyContinue).PagingFiles
        $cs = Get-CimInstance Win32_ComputerSystem
        $previousAuto = [bool]$cs.AutomaticManagedPagefile

        if ($previousAuto) {
            Set-CimInstance -InputObject $cs -Property @{ AutomaticManagedPagefile = $false } -ErrorAction Stop
        }

        $settings = @(Get-CimInstance Win32_PageFileSetting -ErrorAction SilentlyContinue | Where-Object { $_ })
        $match = $settings | Where-Object { $_.Name -eq $pageName } | Select-Object -First 1
        if ($match) {
            Set-CimInstance -InputObject $match -Property @{ InitialSize = $targetMb; MaximumSize = $targetMb } -ErrorAction Stop
        }
        else {
            Set-WmiInstance -Class Win32_PageFileSetting -Arguments @{
                Name        = $pageName
                InitialSize = $targetMb
                MaximumSize = $targetMb
            } -ErrorAction Stop | Out-Null
        }

        New-ItemProperty -LiteralPath $mmPath -Name PagingFiles -Value @($pageSpec) -PropertyType MultiString -Force | Out-Null
        New-ItemProperty -LiteralPath $mmPath -Name ClearPageFileAtShutdown -Value 0 -PropertyType DWord -Force | Out-Null
        Write-Host "  [ок] Файл подкачки зафиксирован: $targetMb МБ на $pageName (после перезагрузки)." -ForegroundColor Green
    }
    catch {
        Write-Warning "  Файл подкачки оставлен как был: $($_.Exception.Message)"
        try {
            if ($null -ne $previousFiles) {
                New-ItemProperty -LiteralPath $mmPath -Name PagingFiles -Value $previousFiles -PropertyType MultiString -Force | Out-Null
            }
            if ($previousAuto) {
                $cs2 = Get-CimInstance Win32_ComputerSystem
                Set-CimInstance -InputObject $cs2 -Property @{ AutomaticManagedPagefile = $true } -ErrorAction SilentlyContinue
            }
        }
        catch {
            Write-Warning "  Не удалось автоматически вернуть прежний файл подкачки. После перезагрузки откройте: Система -> Дополнительно -> Быстродействие -> Дополнительно -> Виртуальная память."
        }
    }
}

function Protect-NeededServices {
    Write-Host ""
    Write-Host "Нужные службы (если какая-то была выключена раньше — включаем обратно)" -ForegroundColor Cyan

    # Сеть и Wi-Fi. Без этого браузер не откроет страницу.
    @(
        "WlanSvc",   # WLAN AutoConfig — сам Wi-Fi
        "Wcmsvc",    # диспетчер подключений
        "Dhcp",      # адрес от роутера
        "Dnscache",  # DNS-клиент
        "NlaSvc",    # определяет, что сеть есть
        "nsi",       # сетевой стек, от него зависит DHCP
        "netprofm",  # профили сетей
        "Netman",
        "NcbService",
        "EventSystem"
    ) | ForEach-Object {
        Repair-ServiceIfDisabled -Name $_ -StartupType Automatic -Start
    }

    # Эти службы обычно сами стартуют по запросу. Главное — не держать их в «Отключена».
    @(
        "WinHttpAutoProxySvc", # автонастройка прокси, её спрашивают браузеры
        "VaultSvc",            # сохранённые пароли Wi-Fi
        "RmSvc",               # радиоадаптер, режим полёта
        "Eaphost",             # WPA-Enterprise / 802.1X, если такая сеть
        "NetSetupSvc",
        "QWAVE"                # служба качества аудио/видео, по требованию
    ) | ForEach-Object {
        Repair-ServiceIfDisabled -Name $_ -StartupType Manual
    }

    # Звук и планировщик мультимедиа. Без них ролик будет немой или дёрганый.
    @(
        "Audiosrv",
        "AudioEndpointBuilder",
        "MMCSS"
    ) | ForEach-Object {
        Repair-ServiceIfDisabled -Name $_ -StartupType Automatic -Start
    }

    # Bluetooth оставляем: часто кино смотрят в беспроводных наушниках.
    Repair-ServiceIfDisabled -Name "bthserv" -StartupType Automatic -Start
    @(
        "BTAGService",
        "BthAvctpSvc",
        "DeviceAssociationService"
    ) | ForEach-Object {
        Repair-ServiceIfDisabled -Name $_ -StartupType Manual
    }

    # Каркас Windows. Эти службы не оптимизируют отключением — без них система неживая.
    @(
        "RpcSs",
        "DcomLaunch",
        "RpcEptMapper",
        "LSM",
        "SamSs",
        "ProfSvc",
        "UserManager",
        "Power",
        "PlugPlay",
        "Winmgmt",
        "EventLog",
        "Schedule",
        "SystemEventsBroker",
        "gpsvc",
        "CoreMessagingRegistrar",
        "BrokerInfrastructure",
        "StateRepository",
        "TextInputManagementService",
        "Appinfo",
        "ShellHWDetection",
        "FontCache",
        "Themes",
        "CryptSvc",
        "KeyIso",
        "camsvc",
        "StorSvc",
        "sppsvc",
        "AppXSvc",
        "ClipSVC",
        "TokenBroker",
        "TimeBrokerSvc",
        "msiserver",
        "TrustedInstaller",
        "VSS",
        "swprv",
        "defragsvc",
        "W32Time",
        "DsmSvc",
        "hidserv"
    ) | ForEach-Object {
        $startType = "Automatic"
        if ($_ -in @("KeyIso", "camsvc", "StorSvc", "AppXSvc", "ClipSVC", "TokenBroker", "TimeBrokerSvc", "msiserver", "TrustedInstaller", "VSS", "swprv", "defragsvc", "W32Time", "DsmSvc", "hidserv")) {
            $startType = "Manual"
        }
        Repair-ServiceIfDisabled -Name $_ -StartupType $startType
    }

    # Защита интернет-сессии. На слабом ПК она стоит ресурсов, но без неё смотреть кино в браузере рискованно.
    @(
        "WinDefend",
        "WdNisSvc",
        "SecurityHealthService",
        "wscsvc",
        "BFE",
        "mpssvc"
    ) | ForEach-Object {
        Repair-ServiceIfDisabled -Name $_ -StartupType Automatic -Start
    }
}

# --- Проверка прав -----------------------------------------------------------
if ($env:OS -ne "Windows_NT") {
    Write-Host "Этот скрипт предназначен только для Windows 10. Здесь он ничего не меняет." -ForegroundColor Red
    exit 1
}

if (-not (Test-IsAdministrator)) {
    Write-Host "Скрипт не запущен от имени администратора." -ForegroundColor Red
    Write-Host "Откройте PowerShell через «Запуск от имени администратора» и выполните:"
    Write-Host "  Set-ExecutionPolicy -Scope Process Bypass -Force"
    Write-Host "  & '$PSCommandPath'"
    exit 1
}

if ($Restore) {
    Invoke-Restore
    exit 0
}

$script:BackupDir = Join-Path $PSScriptRoot "backup"
New-Item -ItemType Directory -Path $script:BackupDir -Force | Out-Null
try {
    Start-Transcript -LiteralPath (Join-Path $script:BackupDir "last-run.log") -Force | Out-Null
}
catch {
    Write-Warning "Журнал транскрипта не включился: $($_.Exception.Message)"
}

try {
    Write-Host "Оптимизация Windows 10 для кино в браузере." -ForegroundColor White
    Write-Host "Процессор E1-2100, 4 ГБ RAM, жёсткий диск. Лишние службы будут выключены." -ForegroundColor White

    try {
        $explorer = Get-CimInstance Win32_Process -Filter "Name = 'explorer.exe'" -ErrorAction SilentlyContinue | Select-Object -First 1
        if ($explorer) {
            $ownerInfo = Invoke-CimMethod -InputObject $explorer -MethodName GetOwner
            $loggedOn = "$($ownerInfo.Domain)\$($ownerInfo.User)"
            $current = "$env:USERDOMAIN\$env:USERNAME"
            if ($loggedOn -and $current -and ($loggedOn -ne $current)) {
                Write-Warning "PowerShell работает как $current, а в систему вошёл $loggedOn."
                Write-Warning "Настройки рабочего стола попадут в профиль $current. Службы всё равно изменятся для всего ПК."
            }
        }
    }
    catch {
        Write-Warning "Не удалось сравнить текущего пользователя и вошедшего в систему."
    }

    # --- Точка восстановления и резервные копии ------------------------------
    # Сначала сохраняем состояние. Если картина после перезагрузки не устроит,
    # запустите скрипт с ключом -Restore или откатите точку в «Восстановлении системы».
    Write-Host ""
    Write-Host "Резервные копии" -ForegroundColor Cyan
    try {
        $srKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore"
        if (-not (Test-Path -LiteralPath $srKey)) {
            New-Item -Path $srKey -Force | Out-Null
        }
        New-ItemProperty -LiteralPath $srKey -Name "SystemRestorePointCreationFrequency" -Value 0 -PropertyType DWord -Force | Out-Null
        Enable-ComputerRestore -Drive "$env:SystemDrive\" -ErrorAction SilentlyContinue
        Checkpoint-Computer -Description "Optimize-MoviePC before changes" -RestorePointType MODIFY_SETTINGS -ErrorAction Stop
        Write-Host "  [ок] Точка восстановления создана." -ForegroundColor Green
    }
    catch {
        Write-Warning "  Точка восстановления не создана: $($_.Exception.Message)"
        Write-Warning "  Продолжаем. Откат служб всё равно будет в папке backup."
    }

    try {
        Get-CimInstance Win32_Service |
            Select-Object Name, StartMode, State, DisplayName |
            Export-Csv -LiteralPath (Join-Path $script:BackupDir "services-before.csv") -NoTypeInformation -Encoding UTF8
        Write-Host "  [ок] Список служб сохранён в backup\services-before.csv" -ForegroundColor Green
    }
    catch {
        Write-Warning "  Не удалось сохранить список служб: $($_.Exception.Message)"
    }

    @(
        @{ Key = "HKCU\Control Panel\Desktop"; File = "hkcu-desktop.reg" },
        @{ Key = "HKCU\Control Panel\Desktop\WindowMetrics"; File = "hkcu-windowmetrics.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer"; File = "hkcu-explorer.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"; File = "hkcu-personalize.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"; File = "hkcu-gamedvr.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\PushNotifications"; File = "hkcu-toasts.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"; File = "hkcu-content.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Search"; File = "hkcu-search.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications"; File = "hkcu-background.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo"; File = "hkcu-advertising.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"; File = "hkcu-run.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\DWM"; File = "hkcu-dwm.reg" },
        @{ Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Feeds"; File = "hkcu-feeds.reg" },
        @{ Key = "HKCU\System\GameConfigStore"; File = "hkcu-gameconfig.reg" },
        @{ Key = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; File = "hklm-run.reg" },
        @{ Key = "HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"; File = "hklm-run32.reg" },
        @{ Key = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved"; File = "hklm-startupapproved.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection"; File = "hklm-datacollection.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"; File = "hklm-windowsupdate.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR"; File = "hklm-gamedvr.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\OneDrive"; File = "hklm-onedrive.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\Windows Search"; File = "hklm-windowssearch.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\CloudContent"; File = "hklm-cloudcontent.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat"; File = "hklm-appcompat.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\System"; File = "hklm-systempolicy.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization"; File = "hklm-deliveryopt.reg" },
        @{ Key = "HKLM\SOFTWARE\Policies\Microsoft\SQMClient\Windows"; File = "hklm-ceip.reg" },
        @{ Key = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile"; File = "hklm-mmcss.reg" },
        @{ Key = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"; File = "hklm-memory.reg" },
        @{ Key = "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl"; File = "hklm-priority.reg" },
        @{ Key = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power"; File = "hklm-power.reg" },
        @{ Key = "HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers"; File = "hklm-graphics.reg" }
    ) | ForEach-Object {
        Export-RegKey -Key $_.Key -File $_.File
    }

    # --- Службы, которые должны работать -------------------------------------
    Protect-NeededServices

    # --- Телеметрия и диагностика --------------------------------------------
    # Эти службы собирают статистику и пишут на диск. К Wi-Fi и видео они не нужны,
    # а на HDD как раз они часто дают фоновую нагрузку.
    Write-Host ""
    Write-Host "Телеметрия и диагностика" -ForegroundColor Cyan
    @(
        "DiagTrack",
        "dmwappushservice",
        "diagnosticshub.standardcollector.service",
        "WerSvc",
        "wercplsupport",
        "WdiServiceHost",
        "WdiSystemHost",
        "DPS",
        "PcaSvc",
        "diagsvc",
        "pla",
        "wmiApSrv"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Печать и факс -------------------------------------------------------
    # Для кино принтер не нужен. Если позже понадобится печать или «печать в PDF»,
    # верните службу Spooler: services.msc -> тип запуска «Автоматически».
    Write-Host ""
    Write-Host "Печать и факс" -ForegroundColor Cyan
    @(
        "Spooler",
        "PrintNotify",
        "Fax",
        "PrintWorkflowUserSvc_*",
        "StiSvc",
        "WiaRpc"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Удалённый доступ ----------------------------------------------------
    # Удалённый рабочий стол, помощь и VPN-сервер этому ПК не нужны.
    # Обычный домашний Wi-Fi от этого не зависит (Eaphost для сетей предприятия оставлен).
    Write-Host ""
    Write-Host "Удалённый доступ" -ForegroundColor Cyan
    @(
        "RemoteAccess",
        "RemoteRegistry",
        "RasAuto",
        "RasMan",
        "SessionEnv",
        "TermService",
        "UmRdpService",
        "RpcLocator",
        "WinRM",
        "SharedAccess",
        "icssvc",
        "SstpSvc",
        "IKEEXT",
        "PolicyAgent",
        "seclogon",
        "ssh-agent"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Xbox, игры, смешанная реальность ------------------------------------
    Write-Host ""
    Write-Host "Xbox и игровые фоновые службы" -ForegroundColor Cyan
    @(
        "XblAuthManager",
        "XblGameSave",
        "XboxGipSvc",
        "XboxNetApiSvc",
        "BcastDVRUserService_*"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Геолокация, датчики, лишние устройства ------------------------------
    Write-Host ""
    Write-Host "Геолокация, датчики, смарт-карты" -ForegroundColor Cyan
    @(
        "lfsvc",
        "MapsBroker",
        "SensorDataService",
        "SensorService",
        "SensrSvc",
        "RetailDemo",
        "WbioSrvc",
        "SCardSvr",
        "SCPolicySvc",
        "ScDeviceEnum",
        "CertPropSvc",
        "NaturalAuthentication",
        "NgcSvc",
        "NgcCtnrSvc",
        "TabletInputService",
        "FrameServer",
        "WwanSvc"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Обнаружение сети и раздача папок ------------------------------------
    # Браузеру нужен интернет, а не общие папки, UPnP и сетевое обнаружение.
    # Клиент SMB (LanmanWorkstation) оставлен в ручном режиме ниже: сеть Windows
    # иногда сама его вызывает, и жёсткое отключение ломает некоторые окна системы.
    Write-Host ""
    Write-Host "Сетевое обнаружение и общие ресурсы" -ForegroundColor Cyan
    @(
        "SSDPSRV",
        "upnphost",
        "fdPHost",
        "FDResPub",
        "lltdsvc",
        "LanmanServer",
        "TrkWks",
        "WebClient",
        "Netlogon",
        "WMPNetworkSvc",
        "wcncsvc",
        "Wecsvc",
        "SNMPTRAP",
        "p2pimsvc",
        "p2psvc",
        "PNRPsvc",
        "PNRPAutoReg",
        "PeerDistSvc",
        "NetTcpPortSharing",
        "NcdAutoSetup",
        "CscService"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    Set-ManualService -Name "LanmanWorkstation"
    Set-ManualService -Name "dot3svc"
    Set-ManualService -Name "iphlpsvc"
    Set-ManualService -Name "lmhosts"

    # --- Поиск и Superfetch --------------------------------------------------
    # На HDD это главные источники ступора. Индексация и Superfetch читают диск
    # в случайных местах ровно тогда, когда браузер пишет кэш и файл подкачки.
    # Загрузка станет чуть дольше, воспроизведение — ровнее.
    # Плановая дефрагментация (defragsvc) НЕ отключается: жёсткому диску она нужна,
    # но пусть идёт по расписанию, а не во время фильма.
    Write-Host ""
    Write-Host "Индексация и Superfetch" -ForegroundColor Cyan
    @(
        "WSearch",
        "SysMain"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Фоновые службы пользователя -----------------------------------------
    # Контакты, визитки, буфер обмена между устройствами, всплывающие советы.
    # К ролику в браузере отношения не имеют. Bluetooth-службы пользователя не трогаем.
    Write-Host ""
    Write-Host "Фоновые пользовательские службы" -ForegroundColor Cyan
    @(
        "CDPSvc",
        "CDPUserSvc_*",
        "WpnService",
        "WpnUserSvc_*",
        "MessagingService_*",
        "PimIndexMaintenanceSvc_*",
        "OneSyncSvc_*",
        "DevicesFlowUserSvc_*",
        "DevicePickerUserSvc_*",
        "CaptureService_*",
        "ConsentUxUserSvc_*",
        "cbdhsvc_*",
        "CredentialEnrollmentManagerUserSvc_*",
        "UnistoreSvc_*",
        "UserDataSvc_*",
        "UdkUserSvc_*",
        "AarSvc_*",
        "PhoneSvc",
        "WalletService",
        "WpcMonSvc",
        "wisvc",
        "DmEnrollmentSvc",
        "PushToInstall",
        "AssignedAccessManagerSvc",
        "DialogBlockingService",
        "DispBrokerDesktopSvc",
        "DisplayEnhancementService",
        "GraphicsPerfSvc",
        "MixedRealityOpenXRSvc",
        "perceptionsimulation",
        "spectrum",
        "WEPHOSTSVC",
        "WarpJITSvc",
        "fhsvc",
        "SDRSVC",
        "wbengine",
        "workfolderssvc",
        "SmsRouter",
        "EntAppSvc",
        "HvHost",
        "vmickvpexchange",
        "vmicguestinterface",
        "vmicshutdown",
        "vmicheartbeat",
        "vmicvmsession",
        "vmicrdv",
        "vmictimesync",
        "vmicvss",
        "vmcompute",
        "vmms",
        "MSiSCSI",
        "MSDTC",
        "KtmRm",
        "smphost",
        "svsvc",
        "TieringEngineService",
        "AppVClient",
        "AppMgmt",
        "AxInstSV",
        "ALG",
        "AJRouter",
        "shpamsvc",
        "NcaSvc"
    ) | ForEach-Object { Disable-ExtraService -Name $_ }

    # --- Обновления Windows --------------------------------------------------
    # Полностью гасить обновления нельзя: старый Windows 10 в интернете без заплаток
    # быстро становится опасным, а браузер как раз ходит в интернет.
    # Службы переведены в «Вручную», политика — «сообщать перед загрузкой»,
    # без автоматической перезагрузки, пока кто-то вошёл в систему.
    # Раз в месяц, когда фильм не смотрите, откройте Параметры -> Обновление и безопасность.
    # Права на службу WaaSMedicSvc не меняем: захват владельца легко ломает обслуживание системы.
    Write-Host ""
    Write-Host "Обновления Windows (не выключаем, только убираем автозапуск)" -ForegroundColor Cyan
    @(
        "wuauserv",
        "UsoSvc",
        "BITS",
        "DoSvc"
    ) | ForEach-Object { Set-ManualService -Name $_ }

    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoUpdate" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "AUOptions" -Value 2
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" -Name "NoAutoRebootWithLoggedOnUsers" -Value 1
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DeliveryOptimization" -Name "DODownloadMode" -Value 0

    # --- Задачи планировщика -------------------------------------------------
    # Только телеметрия, карты, оценка производительности и сбор статистики диска.
    # Проверку здоровья HDD (DiskDiagnosticResolver), дефрагментацию и Защитник не трогаем.
    # Задачи Центра обновления тоже оставляем: иначе заплатки потом не поставить штатно.
    Write-Host ""
    Write-Host "Лишние задания планировщика" -ForegroundColor Cyan
    $scheduler = Get-Service -Name "Schedule" -ErrorAction SilentlyContinue
    if ($scheduler -and $scheduler.Status -ne "Running") {
        Set-ServiceStartupSafe -Name "Schedule" -StartupType Automatic | Out-Null
        & sc.exe start Schedule | Out-Null
    }
    @(
        "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser",
        "\Microsoft\Windows\Application Experience\ProgramDataUpdater",
        "\Microsoft\Windows\Application Experience\StartupAppTask",
        "\Microsoft\Windows\Application Experience\PcaPatchDbTask",
        "\Microsoft\Windows\Application Experience\MareBackup",
        "\Microsoft\Windows\Autochk\Proxy",
        "\Microsoft\Windows\Customer Experience Improvement Program\Consolidator",
        "\Microsoft\Windows\Customer Experience Improvement Program\UsbCeip",
        "\Microsoft\Windows\Customer Experience Improvement Program\KernelCeipTask",
        "\Microsoft\Windows\DiskDiagnostic\Microsoft-Windows-DiskDiagnosticDataCollector",
        "\Microsoft\Windows\Feedback\Siuf\DmClient",
        "\Microsoft\Windows\Feedback\Siuf\DmClientOnScenarioDownload",
        "\Microsoft\Windows\Maps\MapsToastTask",
        "\Microsoft\Windows\Maps\MapsUpdateTask",
        "\Microsoft\Windows\Windows Error Reporting\QueueReporting",
        "\Microsoft\Windows\Windows Error Reporting\PrivacyConsentStatusTask",
        "\Microsoft\Windows\CloudExperienceHost\CreateObjectTask",
        "\Microsoft\Windows\Diagnosis\Scheduled",
        "\Microsoft\Windows\Maintenance\WinSAT",
        "\Microsoft\Windows\Shell\FamilySafetyMonitor",
        "\Microsoft\Windows\Shell\FamilySafetyRefresh",
        "\Microsoft\Windows\Shell\FamilySafetyUpload",
        "\Microsoft\Windows\DiskFootprint\Diagnostics",
        "\Microsoft\Windows\NetTrace\GatherNetworkInfo",
        "\Microsoft\Windows\PI\Sqm-Tasks",
        "\Microsoft\Windows\Power Efficiency Diagnostics\AnalyzeSystem",
        "\Microsoft\Windows\Speech\SpeechModelDownloadTask",
        "\Microsoft\Windows\HelloFace\FODCleanupTask",
        "\Microsoft\Windows\FileHistory\File History (maintenance mode)",
        "\Microsoft\Windows\Sysmain\ResPriStaticDbTask",
        "\Microsoft\Windows\Sysmain\WsSwapAssessmentTask"
    ) | ForEach-Object {
        $taskName = ($_ -split "\\")[-1]
        $taskPath = $_.Substring(0, $_.LastIndexOf("\") + 1)
        try {
            Disable-ScheduledTask -TaskName $taskName -TaskPath $taskPath -ErrorAction Stop | Out-Null
            Write-Host "  [задача выкл] $_" -ForegroundColor Green
        }
        catch {
            Write-Host "  [задача не найдена или занята] $_" -ForegroundColor DarkGray
        }
    }

    # --- Визуальные эффекты --------------------------------------------------
    # Анимации и прозрачность на этом процессоре отнимают кадры у видео.
    # ClearType (сглаживание шрифтов) оставляем: субтитры должны читаться.
    # Значки проводника не прячем — браузер ещё нужно найти и запустить.
    Write-Host ""
    Write-Host "Визуальные эффекты" -ForegroundColor Cyan
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" -Name "VisualFXSetting" -Value 2
    Set-RegString -Path "HKCU:\Control Panel\Desktop" -Name "DragFullWindows" -Value "0"
    Set-RegString -Path "HKCU:\Control Panel\Desktop" -Name "FontSmoothing" -Value "2"
    Set-RegString -Path "HKCU:\Control Panel\Desktop" -Name "MenuShowDelay" -Value "100"
    # Маска «наилучшее быстродействие»: анимации выключены, шрифты остаются сглаженными.
    New-ItemProperty -LiteralPath "HKCU:\Control Panel\Desktop" -Name "UserPreferencesMask" -PropertyType Binary -Value ([byte[]](0x90, 0x12, 0x03, 0x80, 0x10, 0x00, 0x00, 0x00)) -Force | Out-Null
    Set-RegString -Path "HKCU:\Control Panel\Desktop\WindowMetrics" -Name "MinAnimate" -Value "0"
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "TaskbarAnimations" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ListviewAlphaSelect" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "ListviewShadow" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" -Name "EnableTransparency" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\DWM" -Name "EnableAeroPeek" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize" -Name "StartupDelayInMSec" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications" -Name "ToastEnabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds" -Name "ShellFeedsTaskbarViewMode" -Value 2
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name "HideSCAMeetNow" -Value 1
    Set-RegDword -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer" -Name "HideSCAMeetNow" -Value 1
    # Старый планировщик GPU на HD 8210 только мешает. Значение 1 — выключено.
    Set-RegDword -Path "HKLM:\SYSTEM\CurrentControlSet\Control\GraphicsDrivers" -Name "HwSchMode" -Value 1

    # --- Память и жёсткий диск -----------------------------------------------
    # 4 ГБ легко уходят в ноль, если Windows ещё и сжимает память процессором.
    # E1-2100 дешевле отдать кадры видео, чем тратить их на сжатие.
    # Prefetch/Superfetch выключены по той же причине, что и служба SysMain.
    Write-Host ""
    Write-Host "Память и жёсткий диск" -ForegroundColor Cyan
    try {
        Disable-MMAgent -MemoryCompression -ErrorAction Stop
        Write-Host "  [ок] Сжатие памяти выключено." -ForegroundColor Green
    }
    catch {
        Write-Warning "  Сжатие памяти не изменилось: $($_.Exception.Message)"
    }
    try {
        Disable-MMAgent -PageCombining -ErrorAction Stop
        Write-Host "  [ок] Объединение страниц памяти выключено." -ForegroundColor Green
    }
    catch {
        Write-Warning "  Объединение страниц не изменилось: $($_.Exception.Message)"
    }

    $prefetch = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters"
    Set-RegDword -Path $prefetch -Name "EnablePrefetcher" -Value 0
    Set-RegDword -Path $prefetch -Name "EnableSuperfetch" -Value 0

    # Больше оперативки под кэш файловой системы не отдаём: её и так 4 ГБ.
    & fsutil.exe behavior set memoryusage 1 | Out-Null
    # Не обновлять время последнего доступа к каждому файлу — меньше мелких записей на HDD.
    & fsutil.exe behavior set disablelastaccess 1 | Out-Null
    Write-Host "  [ок] Лишние записи NTFS по времени доступа отключены." -ForegroundColor Green

    # Активному окну (браузеру) отдаём процессор раньше, чем фоновым службам.
    Set-RegDword -Path "HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl" -Name "Win32PrioritySeparation" -Value 38

    Set-FixedPageFile

    # Гибернация на HDD занимает примерно объём RAM и пишет большой файл.
    # Быстрый запуск при этом тоже выключится: загрузка станет чуть дольше, диск — свободнее.
    & powercfg.exe -h off | Out-Null
    Set-RegDword -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" -Name "HiberbootEnabled" -Value 0
    Write-Host "  [ок] Гибернация и быстрый запуск выключены." -ForegroundColor Green

    # --- Электропитание ------------------------------------------------------
    # На E1-2100 выигрыш не в «разгоне» (выше 1 ГГц он почти не бывает), а в том,
    # чтобы Wi-Fi, USB и жёсткий диск не засыпали посреди потока.
    # Пробуждение HDD из сна — это несколько секунд замершего кадра.
    Write-Host ""
    Write-Host "План электропитания" -ForegroundColor Cyan
    $highGuid = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
    $schemes = & powercfg.exe /L
    if ($schemes -notmatch $highGuid) {
        & powercfg.exe -duplicatescheme $highGuid | Out-Null
    }
    & powercfg.exe -setactive $highGuid | Out-Null
    Write-Host "  [ок] Включён план «Высокая производительность»." -ForegroundColor Green

    & powercfg.exe -change -monitor-timeout-ac 20 | Out-Null
    & powercfg.exe -change -monitor-timeout-dc 10 | Out-Null
    & powercfg.exe -change -standby-timeout-ac 0 | Out-Null
    & powercfg.exe -change -standby-timeout-dc 0 | Out-Null
    & powercfg.exe -change -hibernate-timeout-ac 0 | Out-Null
    & powercfg.exe -change -hibernate-timeout-dc 0 | Out-Null
    & powercfg.exe -change -disk-timeout-ac 0 | Out-Null
    & powercfg.exe -change -disk-timeout-dc 0 | Out-Null

    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_DISK DISKIDLE 0 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_DISK DISKIDLE 0 | Out-Null
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_SLEEP HYBRIDSLEEP 0 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_SLEEP HYBRIDSLEEP 0 | Out-Null
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_PCIEXPRESS ASPM 0 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_PCIEXPRESS ASPM 0 | Out-Null
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMIN 100 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMIN 100 | Out-Null
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMAX 100 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR PROCTHROTTLEMAX 100 | Out-Null
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR SYSCOOLPOL 1 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT SUB_PROCESSOR SYSCOOLPOL 1 | Out-Null

    # 0 = максимальная производительность беспроводного адаптера (и от сети, и от батареи).
    $wifiSub = "19cbb8fa-5279-450e-9fac-8a3d5fedd0c1"
    $wifiPwr = "12bbebe6-58d6-4636-95bb-3217ef867c1a"
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT $wifiSub $wifiPwr 0 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT $wifiSub $wifiPwr 0 | Out-Null

    # Выборочная приостановка USB тоже умеет «проваливать» кадр на старых контроллерах.
    $usbSub = "2a737441-1930-4402-8d77-b2bebba308a3"
    $usbSus = "48e6b7a6-50f5-4782-a5d4-53bb8f07e226"
    & powercfg.exe -SETACVALUEINDEX SCHEME_CURRENT $usbSub $usbSus 0 | Out-Null
    & powercfg.exe -SETDCVALUEINDEX SCHEME_CURRENT $usbSub $usbSus 0 | Out-Null
    & powercfg.exe -setactive $highGuid | Out-Null
    Write-Host "  [ок] Диск, Wi-Fi и USB не уходят в энергосбережение." -ForegroundColor Green

    # --- Автозагрузка --------------------------------------------------------
    # Записи Run не удаляем: в диспетчере задач их можно включить обратно.
    # Ярлыки из папок автозагрузки переносятся в backup\startup-shortcuts, не в корзину навсегда.
    # RunOnce не трогаем — там часто лежит хвост установки программы, его нельзя срывать.
    Write-Host ""
    Write-Host "Автозагрузка" -ForegroundColor Cyan
    Disable-StartupRunKey -RunKey "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -ApprovedKey "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run"
    Disable-StartupRunKey -RunKey "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run" -ApprovedKey "HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run"
    Disable-StartupRunKey -RunKey "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run" -ApprovedKey "HKLM:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32"

    $userStartup = [Environment]::GetFolderPath("Startup")
    $commonStartup = Join-Path $env:ProgramData "Microsoft\Windows\Start Menu\Programs\Startup"
    Suspend-StartupFolder -SourceFolder $userStartup -BackupFolder (Join-Path $script:BackupDir "startup-shortcuts\user")
    Suspend-StartupFolder -SourceFolder $commonStartup -BackupFolder (Join-Path $script:BackupDir "startup-shortcuts\common")

    # OneDrive только перестаёт синхронизироваться. Файлы в папке пользователя остаются.
    Get-Process -Name "OneDrive" -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\OneDrive" -Name "DisableFileSyncNGSC" -Value 1
    Write-Host "  [ок] Синхронизация OneDrive отключена, файлы не удалялись." -ForegroundColor Green

    # --- Лишний интерфейс и телеметрия в политиках ---------------------------
    Write-Host ""
    Write-Host "Советы, фоновые приложения, телеметрия" -ForegroundColor Cyan
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SystemPaneSuggestionsEnabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SoftLandingEnabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338388Enabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-338389Enabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-353694Enabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SubscribedContent-353696Enabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" -Name "SilentInstalledAppsEnabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\BackgroundAccessApplications" -Name "GlobalUserDisabled" -Value 1
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo" -Name "Enabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search" -Name "BingSearchEnabled" -Value 0
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Search" -Name "CortanaConsent" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowCortana" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "AllowSearchToUseLocation" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "DisableWebSearch" -Value 1
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name "ConnectedSearchUseWeb" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection" -Name "AllowTelemetry" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat" -Name "AITEnable" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppCompat" -Name "DisableUAR" -Value 1
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\SQMClient\Windows" -Name "CEIPEnable" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "EnableActivityFeed" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "PublishUserActivities" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "UploadUserActivities" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableSoftLanding" -Value 1
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent" -Name "DisableWindowsConsumerFeatures" -Value 1

    # Игровая панель пишет видео на диск и на этом ПК только мешает.
    Set-RegDword -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\GameDVR" -Name "AppCaptureEnabled" -Value 0
    Set-RegDword -Path "HKCU:\System\GameConfigStore" -Name "GameDVR_Enabled" -Value 0
    Set-RegDword -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\GameDVR" -Name "AllowGameDVR" -Value 0

    # --- Мультимедиа ---------------------------------------------------------
    # SystemResponsiveness = 10 означает: 10% CPU оставить системе, остальное можно отдать
    # потокам аудио и видео. Ноль не ставим — на двух ядрах сеть тоже должна успевать.
    # NetworkThrottlingIndex = максимум отключает встроенное урезание скорости мультимедиа.
    Write-Host ""
    Write-Host "Приоритет звука и видео" -ForegroundColor Cyan
    $mmcss = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile"
    Set-RegDword -Path $mmcss -Name "SystemResponsiveness" -Value 10
    if (-not (Test-Path -LiteralPath $mmcss)) {
        New-Item -Path $mmcss -Force | Out-Null
    }
    New-ItemProperty -LiteralPath $mmcss -Name "NetworkThrottlingIndex" -PropertyType DWord -Value ([uint32]::MaxValue) -Force | Out-Null

    foreach ($taskName in @("Audio", "Playback")) {
        $taskPath = Join-Path $mmcss "Tasks\$taskName"
        if (Test-Path -LiteralPath $taskPath) {
            Set-RegString -Path $taskPath -Name "Scheduling Category" -Value "High"
            Set-RegString -Path $taskPath -Name "SFIO Priority" -Value "High"
            Set-RegDword -Path $taskPath -Name "Priority" -Value 6
            Write-Host "  [ок] Повышена важность потока $taskName" -ForegroundColor Green
        }
    }

    # --- Защитник Windows: не выключаем, только снижаем цену проверки --------
    # Полное отключение защиты на компьютере, который ходит в интернет, здесь не делается.
    # Исключаем лишь кэш браузера: он всё равно перезаписывается и сильно дёргает HDD.
    # Документы и загрузки по-прежнему проверяются.
    Write-Host ""
    Write-Host "Защитник Windows (остаётся включённым)" -ForegroundColor Cyan
    try {
        Import-Module Defender -ErrorAction Stop
        Set-MpPreference -ScanAvgCPULoadFactor 5 -ErrorAction SilentlyContinue
        Set-MpPreference -EnableLowCpuPriority $true -ErrorAction SilentlyContinue

        $cachePaths = @(
            (Join-Path $env:LOCALAPPDATA "Google\Chrome\User Data\Default\Cache"),
            (Join-Path $env:LOCALAPPDATA "Google\Chrome\User Data\Default\Code Cache"),
            (Join-Path $env:LOCALAPPDATA "Google\Chrome\User Data\ShaderCache"),
            (Join-Path $env:LOCALAPPDATA "Microsoft\Edge\User Data\Default\Cache"),
            (Join-Path $env:LOCALAPPDATA "Microsoft\Edge\User Data\Default\Code Cache"),
            (Join-Path $env:LOCALAPPDATA "Microsoft\Edge\User Data\ShaderCache")
        )
        $ffProfiles = Join-Path $env:LOCALAPPDATA "Mozilla\Firefox\Profiles"
        if (Test-Path -LiteralPath $ffProfiles) {
            Get-ChildItem -LiteralPath $ffProfiles -Directory -ErrorAction SilentlyContinue | ForEach-Object {
                $cachePaths += (Join-Path $_.FullName "cache2")
            }
        }
        foreach ($cachePath in $cachePaths) {
            try {
                Add-MpPreference -ExclusionPath $cachePath -ErrorAction Stop
                Write-Host "  [исключён кэш] $cachePath" -ForegroundColor Green
            }
            catch {
                Write-Host "  [кэш уже исключён или недоступен] $cachePath" -ForegroundColor DarkGray
            }
        }
    }
    catch {
        Write-Warning "  Параметры Защитника не изменены: $($_.Exception.Message)"
    }

    # Повторная проверка на случай, если остановка какой-то службы потянула за собой звук или Wi-Fi.
    Write-Host ""
    Write-Host "Повторная проверка звука и сети" -ForegroundColor Cyan
    Protect-NeededServices

    Write-Host ""
    Write-Host "Готово. Выключено служб (вместе с вариантами имён): $($script:DisabledOk). Не удалось: $($script:DisabledFail)." -ForegroundColor Green
    Write-Host "Перезагрузите компьютер, когда будет удобно. Сам скрипт перезагрузку не запускает." -ForegroundColor Yellow
    Write-Host "Откат: .\Optimize-MoviePC.ps1 -Restore" -ForegroundColor Yellow
    Write-Host "Раз в месяц, не во время фильма, имеет смысл дефрагментировать диск: defrag $env:SystemDrive /O" -ForegroundColor Yellow

    Write-Host ""
    Write-Host "Браузер для этого железа" -ForegroundColor Cyan
    Write-Host @"
Ставьте Mozilla Firefox: https://www.mozilla.org/firefox/
На E1-2100 и 4 ГБ RAM он обычно легче Chrome и Edge.

Radeon HD 8210 аппаратно декодирует H.264 и не умеет VP9/AV1.
Поставьте расширение h264ify, иначе YouTube отдаст VP9 и ролик будет считать процессор.
Смотрите в 720p, включите аппаратное ускорение, поставьте uBlock Origin
и не держите вторую тяжёлую программу рядом с фильмом.

Подробнее: $(Join-Path $PSScriptRoot "browser-recommendation.txt")
"@
}
finally {
    try { Stop-Transcript | Out-Null } catch { }
}

# =============================================================================
# Браузер (кратко, чтобы совет остался прямо в скрипте)
#
# Лучший вариант для AMD E1-2100 / 4 ГБ / HDD — Mozilla Firefox.
# Chrome и Edge на нескольких вкладках съедают гигабайт и больше, после чего
# Windows активно листает файл подкачки на жёстком диске и кадр замирает.
#
# Обязательно расширение h264ify или enhanced-h264ify.
# Видеоядро HD 8210 тянет H.264. VP9 и AV1 идут программно и заикаются даже в 480p.
# Разрешение для этого ПК — 720p. Аппаратное ускорение в браузере должно быть включено.
# uBlock Origin убирает рекламу, которая на двух ядрах по 1 ГГц сама по себе роняет кадр.
# Одна вкладка с видео. Не запускайте Chrome и Firefox одновременно.
# =============================================================================

So machen Sie die Änderungen rückgängig (-Restore)

Führen Sie im selben Ordner (daneben muss der Ordner backup\ liegen) als Administrator aus:

.\Optimize-MoviePC.ps1 -Restore

Das Skript stellt die Starttypen der Dienste aus services-before.csv wieder her (ohne sie neu zu starten), importiert die gespeicherten Registrierungskopien, stellt die Autostart-Verknüpfungen wieder her und bittet um einen Neustart. Wenn der Ordner backup\ nicht vorhanden ist, wird vorgeschlagen, den Systemwiederherstellungspunkt zu verwenden.

Was -Restore nicht zurückgibt: Speicherkomprimierung, Ruhezustand, Energieplan, Auslagerungsdatei (nur teilweise), deaktivierte Aufgaben der Aufgabenplanung (bleiben deaktiviert), fsutil-Einstellungen; der OneDrive-Prozess wird nicht neu gestartet. Ein Teil lässt sich manuell zurückholen:

powercfg -h on
Enable-MMAgent -MemoryCompression -PageCombining

Eine vollständige Rückabwicklung erfolgt über den erstellten Systemwiederherstellungspunkt.

Browser für den Fernseher: Einstellungen, ohne die Videos ruckeln werden

  • Mozilla Firefox. Chrome und Edge belegen mit mehreren Tabs oft 1–1,5 GB Arbeitsspeicher; zusammen mit Windows bleibt von den 4 GB nichts übrig, das Auslagern auf die HDD beginnt und das Bild friert ein. Firefox verbraucht mit 1–2 Tabs meist weniger.
  • Erweiterung h264ify (oder enhanced-h264ify) für YouTube. Der Radeon HD 8210 dekodiert H.264 hardwaremäßig, kann aber kein VP9/AV1. Ohne die Erweiterung dekodiert der Prozessor VP9, und das Bild zerfällt selbst bei 480p.
  • Hardwarebeschleunigung – aktivieren Sie sie unter Einstellungen → Leistung.
  • 720p – 1080p schafft diese Hardware oft nicht.
  • uBlock Origin – Werbung bedeutet zusätzliches JavaScript und Ruckler.
  • Ein Tab; starten Sie Chrome und Firefox nicht gleichzeitig. Wenn es unbedingt Chromium sein muss – ein Chrome oder Edge + enhanced-h264ify + uBlock Origin, ein Tab 720p, aber die Reserven sind schlechter als bei Firefox.

Die realistische Obergrenze eines solchen Computers für den Fernseher: ein Film 720p in H.264, WLAN ohne Energiesparmodus des Adapters, ohne Downloads und Updates im Hintergrund.

Fazit

Die Optimierung eines alten Computers macht daraus keine Gaming-Station, aber ein schwacher PC für Multimedia ist durchaus realistisch: ein erleichtertes Windows 10, der richtige Browser und der Codec H.264 ermöglichen es, Filme und YouTube auf dem Fernseher ohne zusätzliche Ausgaben anzusehen.

Brauchen Sie Hilfe bei ernsthafterer Technik? Das Team von crmgo.eu richtet Websites und Server ein, migriert Projekte, kümmert sich um SEO-Promotion und die Automatisierung von Geschäftsprozessen mit CRM. Hinterlassen Sie eine Anfrage auf crmgo.eu – wir beraten und erledigen es.

Hinweis: Dieser Beitrag kann KI-unterstützt erstellt und anschließend redaktionell geprüft worden sein. Verantwortlich: Dmytro Lomaka, Kaltenkirchen.