Powershell 以编程方式更改键盘布局

Powershell 以编程方式更改键盘布局,powershell,Powershell,我在一家瑞士公司工作,使用de-CH作为标准键盘布局,同时使用de-de键盘 我可以手动将键盘设置更改为首选的de-布局,将其设置为标准,并分配一个快捷键 然而:不知何故,我的设置在任意时间后消失(可能与管理员运行的更新有关),因此我必须每隔几天重复一次 建议使用Win 8中的Powershell有一种简单的方法来更改键盘布局: 设置WinUserLanguageList-LanguageList DE-DE 不幸的是,我和Win7一起工作。因此,我得到以下错误消息,作为Powershell伪命

我在一家瑞士公司工作,使用
de-CH
作为标准键盘布局,同时使用
de-de
键盘

我可以手动将键盘设置更改为首选的
de
-布局,将其设置为标准,并分配一个快捷键

然而:不知何故,我的设置在任意时间后消失(可能与管理员运行的更新有关),因此我必须每隔几天重复一次

建议使用Win 8中的Powershell有一种简单的方法来更改键盘布局:

设置WinUserLanguageList-LanguageList DE-DE

不幸的是,我和Win7一起工作。因此,我得到以下错误消息,作为Powershell伪命令,我将其解释为一条简单的语句,表明该cmdlet在Win 7中不存在:

PS C:\Users\b036081> Set-WinUserLanguageList -LanguageList DE-DE
Set-WinUserLanguageList : The term 'Set-WinUserLanguageList' is not recognized as the name of a cmdlet, function, 
script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path 
is correct and try again.
At line:1 char:1
+ Set-WinUserLanguageList -LanguageList DE-DE
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Set-WinUserLanguageList:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
现在,在Powershell中是否有另一种相对简单的方法?甚至在C++、C、批、VB……/P>
非常感谢

我想您可以在注册表中更改它

$psdrive = New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS

Set-ItemProperty -Path "HKU:\.DEFAULT\Keyboard Layout\Preload\" -Name 1 -Value 00000407

$psdrive | Remove-PSDrive
Set-ItemProperty -Path 'Registry::HKEY_USERS\.DEFAULT\Keyboard Layout\Preload\' -Name 1 -Value 00010409
下面有一个注册表项:

HKU:\.默认\键盘布局\预加载\

在注册表中轻松地将其更改为国家代码00000407-de-de,这将解决您的问题

但首先,您必须创建一个新的PS驱动器,以便从注册表“挂载”“HKEY_用户”

$psdrive = New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS

Set-ItemProperty -Path "HKU:\.DEFAULT\Keyboard Layout\Preload\" -Name 1 -Value 00000407

$psdrive | Remove-PSDrive
Set-ItemProperty -Path 'Registry::HKEY_USERS\.DEFAULT\Keyboard Layout\Preload\' -Name 1 -Value 00010409

您可以通过.NET类轻松更改当前输入语言,如下所示:

Add-Type -AssemblyName 'System.Windows.Forms'
[System.Windows.Forms.InputLanguage]::CurrentInputLanguage = [System.Windows.Forms.InputLanguage]::InstalledInputLanguages | ? { $_.Culture -eq 'ru-RU' }
使用此命令

powershell -command "Set-WinUserLanguageList -Force 'en-US'"


如果我将任何其他语言设置为默认语言,我的系统会自动重置为
de CH
布局,但我仍然可以使用
ALT
+
SHIFT
+
1
。。。只要我不尝试删除未使用的
de CH
条目


Powershell方法似乎不适用于我的系统。

在Powershell窗口中运行以下命令:

Set-WinDefaultInputMethodOverride -InputTip "0409:00000409"
此命令将默认输入法覆盖设置为英语(美国)-US

选项1:WinDefaultInputMethodOverride 您可以替代默认输入法。
inputIP
是语言标识符和键盘标识符的组合。()

选项2:更新注册表 为此,必须允许您更改注册表

$psdrive = New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS

Set-ItemProperty -Path "HKU:\.DEFAULT\Keyboard Layout\Preload\" -Name 1 -Value 00000407

$psdrive | Remove-PSDrive
Set-ItemProperty -Path 'Registry::HKEY_USERS\.DEFAULT\Keyboard Layout\Preload\' -Name 1 -Value 00010409
标识符 可以在上找到键盘标识符的列表。在注册表中,您可以找到系统上可用的语言标识符可在上找到


尝试以下操作:P/调用并将其包装为cmdlet应该可以做到这一点。但是,由于您的问题是关于一种相对简单的方法,所以不会是这样(但有人可以编写)。请咨询您的公司it管理员…@Jeroenmoster会调查,如果其他方法失败,但是,我几乎不知道如何创建ps cmdlet。然后,再次兴奋地学习新的东西。谢谢你的帮助idea@scotru尝试将键盘设置为
en
时,没有产生任何错误。但是,没有明显的效果我喜欢这个想法,我想这通常是可行的,但是:我不允许更改注册表项(没有管理员权限)。Ofc你不会知道的!无需创建psdrive:只需使用
Registry::HKEY\U USERS
而不是
HKU:
。在使用PowerShell 5的Windows 10上,此操作失败,因为
无法找到类型[System.Windows.Forms.InputLanguage]。
除非前面有
添加类型-AssemblyName“System.Windows.Forms”
。关于
System.Windows.Forms
名称空间的某些内容让我觉得这对于PowerShell来说不是很有效……这完全取决于任务。有些人可能有编辑注册表的限制。这只是另一种方法。@Kirill Pashkov,虽然我没有收到错误消息,但在玩它一段时间时,我注意不到任何效果。然而,这可能与我的用户配置文件中的限制有关。不过:非常感谢你的替代方法!注意:这仅用于设置当前线程的当前输入语言。
System.Windows.Forms.InputLanguage
类的上游文档在这里:如原始问题中所述,PS不识别
Set-WinUserLanguageList
。此答案很有用;我们中的许多人不再使用Windows7了。希望不是OP也一样。:-)对于
windows7
安装
windowsmanagementframework5.1
对您没有帮助(((