Atualizar HKCU \ Control Panel \ Colors Background via CMD e aplicar imediatamente?

4

Olá a todos e obrigado antecipadamente por qualquer assistência!

Toda vez que eu reinicio meu PC no trabalho, a política de grupo entra em vigor e altera a cor do plano de fundo do meu sistema para o padrão da empresa. No Windows 7, como a cor do plano de fundo é mais clara, ele torna todo o texto do ícone escuro e impossível de ser lido com meu papel de parede escuro. Além disso, se eu for remoto em minha máquina e desabilitar as opções da interface do usuário para uma experiência mais suave, o fundo é a cor padrão muito brilhante em vez de um papel de parede ... Tudo isso dito, essencialmente eu recorro a mudar a cor de fundo para uma cor mais escura manualmente navegando até a janela "Window Color and Appearance" e definindo a cor da área de trabalho para uma cor escura.

Então,comeceiaprocurarumamaneiradeautomatizaressaalteração,emeuprimeiropensamentoécriarumscriptBATsimpleseiniciá-lonaminhapastadeinicialização.Eudescobricomoatualizaraentradaderegistroparaessamudançadecorespecífica,masnãoconsigodescobrircomofazercomqueelatenhaefeitodamesmamaneiraqueselecionarobotão"Aplicar" na "Cor e Aparência da Janela". "janela força a mudança.

Aqui está a alteração do registro via CMD:

  • REG ADD "HKEY_CURRENT_USER\Control Panel\Colors" /v Background /t REG_SZ /d "0 0 0" /f

Esse comando parece alterar o valor do Registro conforme pretendido. Mas nunca atualiza meu desktop real. Alguma idéia de como fazer isso aplicar a alteração do Registro?

Aqui estão alguns comandos que já experimentei e não parecem fazer o truque:

  • RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters
  • RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1, True

Eu também tentei parar e reiniciar o Gerenciador de Sessão do Gerenciador de Janelas da Área de Trabalho, mas a mudança de cor ainda não foi aplicada:

  • NET STOP uxsms
  • NET START uxsms

Peço desculpas pela longa pergunta. Qualquer ajuda é muito apreciada!

    
por Urk 30.05.2017 / 17:09

1 resposta

5

Mesmo que você esteja configurando a entrada do Registro corretamente, a alteração não entrará em vigor porque a notificação "configuração alterada" apropriada não será enviada. A abordagem rundll32 , embora comumente recomendada, é incorreta e funciona apenas por acaso. Para obter mais informações, consulte Em que circunstâncias posso usar o rundll32 para invocar uma função em uma DLL?

A maneira correta de alterar a cor do plano de fundo da área de trabalho é usar o SetSysColors , que coloca suas configurações em prática imediatamente. Ele não atualiza o Registro, mas isso não importa muito, já que o seu parece ter se surpreendido toda vez que você faz logon. Infelizmente, é um método nativo, não exposto em nenhum utilitário de linha de comando conveniente. Para chamá-lo, podemos usar o PowerShell! Primeiro definimos um tipo:

add-type -typedefinition "using System;'n using System.Runtime.InteropServices;'n public class PInvoke { [DllImport('"user32.dll'")] public static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues); }"

(P / Invoke definição cortesia de esta questão Stack Overflow .) Então podemos chamá-lo:

[PInvoke]::SetSysColors(1, @(1), @(0xAA40C0))

Depois de executar isso, a área de trabalho fica bastante rosa. A cor é determinada pelo último argumento, 0xAA40C0 no meu exemplo. O byte mais significativo dos três ( AA ) é azul, o próximo é verde e o último é vermelho. A notação @ cria uma matriz, que é o que a função espera.

Para fazer tudo isso a partir de um script em lote, use este verso:

powershell -command add-type -typedefinition """"using System;'n using System.Runtime.InteropServices;'n public class PInvoke { [DllImport('"""user32.dll'""")] public static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues); }""""; [PInvoke]::SetSysColors(1, @(1), @(0xAA40C0))
    
por 01.06.2017 / 20:50