Как изменить тему в Windows 7 с помощью скрипта PowerShell?

Я хотел бы иметь скрипт, который изменил бы текущую тему Windows 7. Я нашел запись реестра, где это хранится, но мне, по-видимому, нужно предпринять некоторые дальнейшие действия, чтобы заставить Windows Загрузить тему. Что мне следует делать?

вот скрипт, который я пытаюсь использовать, но он не работает (реестр обновлен, но тема не изменилась):

######################################
# Change theme by updating registry. #
######################################

# Define argument which defines which theme to apply. 
param ( [string] $theme = $(Read-Host -prompt "Theme") )

# Define the themes we know about.
$knownThemes = @{ "myTheme" = "mytheme.theme"; "alien" = "oem.theme" }

# Identify paths to user themes.
$userThemes = " C:UsersyodaAppDataLocalMicrosoftWindows"

# Get name of theme file, based on theme provided
$themeFile = $knownThemes["$theme"]

# Build path to theme and set registry.
$newThemePath = "$userThemes$themeFile"
$regPath = "HKCU:SoftwareMicrosoftWindowsCurrentVersionThemes"
Set-ItemProperty -path $regPath -name CurrentTheme -value $newThemePath

# Update system with this info...this isn't working!
rundll32.exe user32.dll, UpdatePerUserSystemParameters
28
задан Peter Mortensen
07.01.2023 23:19 Количество просмотров материала 3115
Распечатать страницу

2 ответа

посмотрите на вопрос о переполнении стека Как изменить текущую тему Windows программно? решение той же проблемы. Похоже, что большинство комментаторов думают, что вы не должны этого делать вообще (вы можете игнорировать их). Другие предложения можно легко превратить в сценарий PowerShell-просто вызовите соответствующие функции API.

2
отвечен Traveling Tech Guy 2023-01-09 07:07

Я решил проблему с этим кодом (проверено в Windows 7 64bits)

# definition de la fonction native Windows permettant le test d'activation d'Aero
$def = @"

    [DllImport("dwmapi.dll", PreserveSig = false)]
    public static extern bool DwmIsCompositionEnabled();

"@
# chargement de la fonction native dans un namespace personnel
Add-Type -Namespace MaifCode -Name Aero -MemberDefinition $def


# fonction qui check si Aero est desactive ou non
function Check-Is-Aero{
    [CmdletBinding()]
    param()
    Write-Verbose "[$([DateTime]::Now)] ==> Test de la presence du mode Aero pour la session utilisateur $env:USERNAME"
    if([MaifCode.Aero]::DwmIsCompositionEnabled()){
        Write-Verbose "[$([DateTime]::Now)] ==> Aero actif pour la session utilisateur $env:USERNAME"
        return $true
    }else{
        Write-Verbose "[$([DateTime]::Now)] ==> Aero inactif pour la session utilisateur $env:USERNAME"
        return $false
    }
}

# fonction qui test si Aero est actif et le desactive dans ce cas
function Disable-Aero{
    [CmdletBinding()]
    param()
    # test si aero actif
    If(Check-Is-Aero) {
        Write-Verbose "[$([DateTime]::Now)] ==> Tentative de desactivation du mode Aero pour la session utilisateur $env:USERNAME"
        # desactivation du mode aero en passant sur le them par defaut
        try{
            Start-Process -Wait -FilePath "rundll32.exe" -ArgumentList "$env:SystemRoot\system32\shell32.dll,Control_RunDLL $env:SystemRoot\system32\desk.cpl desk,@Themes /Action:OpenTheme /file:""C:\Windows\Resources\Ease of Access Themes\basic.theme"""
        }
        catch [exception]
        {
            # si erreur alors on sort et on affiche le message d'erreur
            Write-Error "Erreur dans l'execution de la desactivation du mode Aero : $error"
            exit -1
        }
        Write-Verbose "[$([DateTime]::Now)] ==> Desactivation du mode Aero pour la session utilisateur $env:USERNAME terminee"
    }else{
        Write-Verbose "[$([DateTime]::Now)] ==> sortie du script sans action"
    }
}

# execution du code de desactivation
Disable-Aero -Verbose
# on sort
exit 0
1
отвечен Nicolas 2023-01-09 09:24

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх