如果 PowerShell 有您正在寻找的东西,您总是可以从那里获得它。添加对 C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll 和 C:\Windows\Microsoft.NET\ assembly\GAC_MSIL\Microsoft.InternationalSettings.Commands\v4 的引用。 0_3.0.0.0__31bf3856ad364e35\Microsoft.InternationalSettings.Commands.dll
class Program
{
static void Main(string[] args)
{
System.Management.Automation.PowerShell ps = System.Management.Automation.PowerShell.Create();
List<Microsoft.InternationalSettings.Commands.WinUserLanguage> userLangList = ps.AddCommand("Get-WinUserLanguageList").Invoke()[0].BaseObject as List<Microsoft.InternationalSettings.Commands.WinUserLanguage>;
foreach (Microsoft.InternationalSettings.Commands.WinUserLanguage userLang in userLangList)
{
Console.WriteLine("{0,-31}{1,-47}", "Antonym", userLang.Autonym);
Console.WriteLine("{0,-31}{1,-47}", "EnglishName", userLang.EnglishName);
Console.WriteLine("{0,-31}{1,-47}", "Handwriting", userLang.Handwriting);
Console.WriteLine("{0,-31}{1,-47}", "InputMethodTips", String.Join(",", userLang.InputMethodTips));
Console.WriteLine("{0,-31}{1,-47}", "LanguageTag", userLang.LanguageTag);
Console.WriteLine("{0,-31}{1,-47}", "LocalizedName", userLang.LocalizedName);
Console.WriteLine("{0,-31}{1,-47}", "ScriptName", userLang.ScriptName);
Console.WriteLine("{0,-31}{1,-47}", "Spellchecking", userLang.Spellchecking);
Console.WriteLine();
}
}
}
或者,Microsoft 从注册表中获取大部分此类信息,您可以执行相同的操作:
class Program
{
static void Main(string[] args)
{
(new System.Security.Permissions.RegistryPermission(System.Security.Permissions.PermissionState.Unrestricted)).Assert();
Microsoft.Win32.RegistryKey rkLanguages = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Control Panel\\International\\User Profile");
foreach (string str in rkLanguages.GetSubKeyNames())
{
Console.WriteLine(str);
Microsoft.Win32.RegistryKey rkLang = rkLanguages.OpenSubKey(str);
foreach (string value in rkLang.GetValueNames())
{
if (rkLang.GetValueKind(value) == Microsoft.Win32.RegistryValueKind.DWord)
{
string blah = String.Concat("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\", value.Split(new char[] { ':' })[1]);
Microsoft.Win32.RegistryKey rkKeyboardLayout = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(blah);
Console.WriteLine(rkKeyboardLayout.GetValue("Layout Text"));
}
}
Console.WriteLine();
}
System.Security.CodeAccessPermission.RevertAssert();
}
}