Atualiza a barra de idiomas no Windows Vista / 7 programaticamente

4

Estou tentando configurar a Barra de Idiomas (o alternador de idioma na bandeja do sistema que aparece quando você tem vários idiomas de entrada instalados) para nossos usuários.

EupossoadicionarnovosidiomasfacilmenteusandoregkeysabaixodeHKCU,masoproblemaéqueousuárioprecisarelogaroureiniciarseucomputadorparaveroefeito.

Asteclasqueeuuso(estouescrevendo-ascomumaconfiguraçãoativa)estãoem"HKEY_CURRENT_USER \ Keyboard Layout \ Preload" abaixo dessa chave são nome / valores do tipo REG_SZ.

Geralmente já existem chaves como "1"="0000407" "2"="0000409" o que significa que o usuário tem o layout de teclado alemão e inglês instalado, Se eu quiser adicionar, vamos dizer italiano, gostaria de adicionar a chave "3"="0000410". após o próximo logoff / login, a alteração é visível para o usuário.

agora o que eu já tentei é enviar várias mensagens do Windows, como WM_SETTINGCHANGE ou o comando "RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters". mas nenhum resultado útil até agora.

estou ficando sem ideias aqui, fazer com que centenas de usuários façam logoff / logon não seria tão bom: /

Eu também pensei em automatizar os mouseclicks (por exemplo, com autoit), mas isso geralmente causa mais problemas do que benefícios.

    
por weberik 07.08.2013 / 16:23

1 resposta

2

Você não deve fazer isso através da edição do registro, já que nosso conhecimento sobre isso é bastante limitado, mas use o mecanismo fornecido pelo Windows.

A Microsoft criou o Windows PowerShell como sua principal interface de programação que permite o acesso a praticamente todas as funcionalidades do Windows. Infelizmente, a família de funções do PowerShell que pertence à linguagem, Cmdlets de configurações internacionais , foi apresentado apenas para o Windows 8 / Server 2012 e não está disponível para o Windows 7 ou Vista.

No entanto, existem soluções para o Windows 7 ou o Vista, conforme descrito no artigo do MSDN: Configuração da linha de comando do Windows Vista das configurações internacionais .

Um exemplo de uso desta técnica pode ser encontrado em Configurando opções regionais e de idioma internacional Configurações com automação de linha de comando , que basicamente usa um arquivo xml especialmente criado com o comando:

control intl.cpl,, /f:"intlsettings.xml"

Abaixo estão listados alguns exemplos de arquivos xml.

Alterar o idioma atual

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
    <!--User List-->
    <gs:UserList>
        <gs:User UserID="Current"/>
    </gs:UserList>
    <!-- User Locale-->
    <gs:UserLocale>
        <gs:Locale Name="es-US" SetAsCurrent="true"/>
    </gs:UserLocale>
</gs:GlobalizationServices>

Adicionar idioma do teclado

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList> 
<gs:InputPreferences> 
<gs:InputLanguageID Action="add" ID="0804:E0200804"/>
</gs:InputPreferences>
</gs:GlobalizationServices>

Remover idioma do teclado

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:UserList>
<gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/></gs:UserList> 
<gs:InputPreferences> 
<gs:InputLanguageID Action="remove" ID="0804:E0200804"/>
</gs:InputPreferences>
</gs:GlobalizationServices>

fonte

    
por 10.08.2013 / 15:12