/* 參考來源: http://reflector.webtropy.com/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/WinForms/Managed/System/WinForms/InputLanguage@cs/1305376/InputLanguage@cs http://msdn.microsoft.com/en-us/library/ms171548.aspx http://msdn.microsoft.com/en-us/library/syy068tk.aspx http://go4answers.webhost4life.com/Example/changing-keyboard-layout-issue-218141.aspx http://www.csharp-examples.net/culture-names/ http://www.codeproject.com/Articles/8980/Instantly-Changing-Language-in-the-Form http://www.koders.com/csharp/fid96D51DDF229ADAF1470D43CFE9C6277B051AC885.aspx?s=file#L2 http://msdn.microsoft.com/en-us/library/system.windows.forms.inputlanguage%28v=vs.71%29.aspx http://blogs.msdn.com/b/snippets/archive/2008/12/31/how-to-change-input-language-programmatically.aspx http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/c7a82a6a-763e-424b-84e0-496caa9cfb4d/ */ using System; using System.Collections.Generic; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using Microsoft.Win32; using System.Globalization; namespace InputLanguageDemo { /// <summary> /// 20120521 Geovin Du /// Csharp 輪入法操作 來源網絡 /// 塗聚文 /// </summary> public partial class Form1 : Form { #region //[DllImport("user32")] //private static extern uint ActivateKeyboardLayout(uint hkl, uint Flags); //[DllImport("user32")] //private static extern uint LoadKeyboardLayout(string pwszKLID, uint Flags); //[DllImport("user32")] //private static extern uint GetKeyboardLayoutList(int nBuff, uint[] List); //private static Hashtable FImes; //public static uint KLF_ACTIVATE = 1; #endregion /// <summary> /// /// </summary> public Form1() { InitializeComponent(); //半角,全角問題 if (this.ImeMode != ImeMode.Hangul) this.ImeMode = ImeMode.Hangul; } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { ComboboxItem item = new ComboboxItem(); InputLanguageCollection ilc = InputLanguage.InstalledInputLanguages; foreach (InputLanguage il in ilc) { comboBox1.Items.Add(il.LayoutName); } comboBox1.SelectedIndex = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage); //CULTURE SPEC.CULTURE ENGLISH NAME // get culture names List<string> list = new List<string>(); foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures)) { string specName = "(none)"; try { specName = CultureInfo.CreateSpecificCulture(ci.Name).Name; } catch { } list.Add(String.Format("{0,-12}{1,-12}{2}", ci.Name, specName, ci.EnglishName)); //1 //comboBox2.Items.Add(new Item(ci.Name + "/" + specName + "/" + ci.EnglishName, ci.EnglishName)); //comboBox2.SelectedIndex = 0; //item.Text = "22"; //item.Value = "2"; //comboBox2.Items.Add(item); } list.Sort(); // sort by name //2 comboBox2.DataSource = list; string[] languagename = new string[] { "王码五笔型86版", "五笔型86版" };//存在选择最后的关键字 for (int i = 0; i < languagename.Length; i++) { //设置当前输入法 foreach (InputLanguage iL in InputLanguage.InstalledInputLanguages) { //1 //if (iL.LayoutName == "中文 (简体) - 王码五笔型86版") //{ // InputLanguage.CurrentInputLanguage = iL; // break; //} //2 if (iL.LayoutName.Contains(languagename[i])) { InputLanguage.CurrentInputLanguage = iL;////获取当前输入法信息 break; } } } //获取当前输入法信息 InputLanguage CurrentInput = InputLanguage.CurrentInputLanguage; this.textBox1.Text = CurrentInput.LayoutName; //获取输入法的语言区域 this.textBox3.Text = CurrentInput.Culture.DisplayName; //获取默认的输入法信息 InputLanguage DefaultInput = InputLanguage.DefaultInputLanguage; this.textBox2.Text = DefaultInput.LayoutName; } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { InputLanguage il = InputLanguage.InstalledInputLanguages[comboBox1.SelectedIndex]; InputLanguage.CurrentInputLanguage = il; } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ChangeInput(object sender, System.Windows.Forms.InputLanguageChangedEventArgs e) { InputLanguage il = e.InputLanguage; int i = InputLanguage.InstalledInputLanguages.IndexOf(il); if (i >= 0 && i < InputLanguage.InstalledInputLanguages.Count) { comboBox1.SelectedIndex = i; } } #region ////设定当前Ime,使用方法Ime.SetImeName("中文 (简体) - 拼音); //public static void SetImeName(string ImeName) //{ // //字符串形式 // if (FImes == null) // GetImes(); // uint id = Convert.ToUInt32(FImes[ImeName]); // SetIme(id); //} //public static void SetIme(uint ImeId) //{ // //Id样式 // if (ImeId > 0) // ActivateKeyboardLayout(ImeId, KLF_ACTIVATE); //} ////获得所有的Ime列表 //public static Hashtable GetImes() //{ // if (FImes == null) // FImes = new Hashtable(); // else // return FImes; // uint[] KbList = new uint[64]; // uint TotalKbLayout = GetKeyboardLayoutList(64, KbList); // for (int i = 0; i < TotalKbLayout; i++) // { // string RegKey = String.Format("System//CurrentControlSet//Control//Keyboard Layouts//{0:X8}", KbList[i]); // RegistryKey rk = Registry.LocalMachine.OpenSubKey(RegKey); // if (rk == null) // continue; // string ImeName = (string)rk.GetValue("layout text"); // if (ImeName == null) // continue; // FImes.Add(ImeName, KbList[i]); // } // return FImes; //} #endregion #region /// <summary> /// Changing Current Input Language to a next installed language /// </summary> public void ChangeInputLanguage() { // Nothing to do if there is only one Input Language supported: if (InputLanguage.InstalledInputLanguages.Count == 1) return; // Get index of current Input Language int currentLang = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage); // Calculate next Input Language InputLanguage nextLang = ++currentLang == InputLanguage.InstalledInputLanguages.Count ? InputLanguage.InstalledInputLanguages[0] : InputLanguage.InstalledInputLanguages[currentLang]; // Change current Language to the calculated: ChangeInputLanguage(nextLang); } /// <summary> /// Changing current Input Language to a new one passed in the param /// </summary> /// <param name="ISOLang">ISO Culture name string code e.g. "en" for English</param> public void ChangeInputLanguage(string ISOLang) { // Convert ISO Culture name to InputLanguage object. Be aware: if ISO is not supported // ArgumentException will be invoked here InputLanguage nextLang = InputLanguage.FromCulture(new System.Globalization.CultureInfo(ISOLang)); ChangeInputLanguage(nextLang); } /// <summary> /// Changing current Input Language to a new one passed in the param /// </summary> /// <param name="LangID">Integer Culture code e.g. 1033 for English</param> public void ChangeInputLanguage(int LangID) { // Convert Integer Culture code to InputLanguage object. Be aware: if Culture code is not supported // ArgumentException will be invoked here InputLanguage nextLang = InputLanguage.FromCulture(new System.Globalization.CultureInfo(LangID)); ChangeInputLanguage(nextLang); } /// <summary> /// Changing current Input Language to a new one passed in the param /// </summary> /// <param name="InputLang">New Input Language as InputLanguage object</param> public void ChangeInputLanguage(InputLanguage InputLang) { // Check is this Language really installed. Raise exception to warn if it is not: if (InputLanguage.InstalledInputLanguages.IndexOf(InputLang) == -1) throw new ArgumentOutOfRangeException(); // InputLAnguage changes here: InputLanguage.CurrentInputLanguage = InputLang; } #endregion /// <summary> /// 设置当前输入框的输入法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void textBox1_Enter(object sender, EventArgs e) { string[] languagename = new string[] { "拼音", "中文", "五笔" }; for (int i = 0; i < languagename.Length; i++) { foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages) { if (lang.LayoutName.Contains(languagename[i])) { InputLanguage.CurrentInputLanguage = lang;////获取当前输入法信息 this.textBox1.Text = lang.LayoutName ; break; } } } } } /// <summary> /// /// </summary> public class Item { public string Name; public string Value; public Item(string name, string value) { Name = name; Value = value; } public override string ToString() { // Generates the text shown in the combo box return Name; } } /// <summary> /// /// </summary> public class ComboboxItem { public string Text { get; set; } public object Value { get; set; } public override string ToString() { return Text; } } }
CULTURE SPEC.CULTURE ENGLISH NAME
--------------------------------------------------------------
Invariant Language (Invariant Country)
af af-ZA Afrikaans
af-ZA af-ZA Afrikaans (South Africa)
ar ar-SA Arabic
ar-AE ar-AE Arabic (U.A.E.)
ar-BH ar-BH Arabic (Bahrain)
ar-DZ ar-DZ Arabic (Algeria)
ar-EG ar-EG Arabic (Egypt)
ar-IQ ar-IQ Arabic (Iraq)
ar-JO ar-JO Arabic (Jordan)
ar-KW ar-KW Arabic (Kuwait)
ar-LB ar-LB Arabic (Lebanon)
ar-LY ar-LY Arabic (Libya)
ar-MA ar-MA Arabic (Morocco)
ar-OM ar-OM Arabic (Oman)
ar-QA ar-QA Arabic (Qatar)
ar-SA ar-SA Arabic (Saudi Arabia)
ar-SY ar-SY Arabic (Syria)
ar-TN ar-TN Arabic (Tunisia)
ar-YE ar-YE Arabic (Yemen)
az az-Latn-AZ Azeri
az-Cyrl-AZ az-Cyrl-AZ Azeri (Cyrillic, Azerbaijan)
az-Latn-AZ az-Latn-AZ Azeri (Latin, Azerbaijan)
be be-BY Belarusian
be-BY be-BY Belarusian (Belarus)
bg bg-BG Bulgarian
bg-BG bg-BG Bulgarian (Bulgaria)
bs-Latn-BA bs-Latn-BA Bosnian (Bosnia and Herzegovina)
ca ca-ES Catalan
ca-ES ca-ES Catalan (Catalan)
cs cs-CZ Czech
cs-CZ cs-CZ Czech (Czech Republic)
cy-GB cy-GB Welsh (United Kingdom)
da da-DK Danish
da-DK da-DK Danish (Denmark)
de de-DE German
de-AT de-AT German (Austria)
de-DE de-DE German (Germany)
de-CH de-CH German (Switzerland)
de-LI de-LI German (Liechtenstein)
de-LU de-LU German (Luxembourg)
dv dv-MV Divehi
dv-MV dv-MV Divehi (Maldives)
el el-GR Greek
el-GR el-GR Greek (Greece)
en en-US English
en-029 en-029 English (Caribbean)
en-AU en-AU English (Australia)
en-BZ en-BZ English (Belize)
en-CA en-CA English (Canada)
en-GB en-GB English (United Kingdom)
en-IE en-IE English (Ireland)
en-JM en-JM English (Jamaica)
en-NZ en-NZ English (New Zealand)
en-PH en-PH English (Republic of the Philippines)
en-TT en-TT English (Trinidad and Tobago)
en-US en-US English (United States)
en-ZA en-ZA English (South Africa)
en-ZW en-ZW English (Zimbabwe)
es es-ES Spanish
es-AR es-AR Spanish (Argentina)
es-BO es-BO Spanish (Bolivia)
es-CL es-CL Spanish (Chile)
es-CO es-CO Spanish (Colombia)
es-CR es-CR Spanish (Costa Rica)
es-DO es-DO Spanish (Dominican Republic)
es-EC es-EC Spanish (Ecuador)
es-ES es-ES Spanish (Spain)
es-GT es-GT Spanish (Guatemala)
es-HN es-HN Spanish (Honduras)
es-MX es-MX Spanish (Mexico)
es-NI es-NI Spanish (Nicaragua)
es-PA es-PA Spanish (Panama)
es-PE es-PE Spanish (Peru)
es-PR es-PR Spanish (Puerto Rico)
es-PY es-PY Spanish (Paraguay)
es-SV es-SV Spanish (El Salvador)
es-UY es-UY Spanish (Uruguay)
es-VE es-VE Spanish (Venezuela)
et et-EE Estonian
et-EE et-EE Estonian (Estonia)
eu eu-ES Basque
eu-ES eu-ES Basque (Basque)
fa fa-IR Persian
fa-IR fa-IR Persian (Iran)
fi fi-FI Finnish
fi-FI fi-FI Finnish (Finland)
fo fo-FO Faroese
fo-FO fo-FO Faroese (Faroe Islands)
fr fr-FR French
fr-BE fr-BE French (Belgium)
fr-CA fr-CA French (Canada)
fr-FR fr-FR French (France)
fr-CH fr-CH French (Switzerland)
fr-LU fr-LU French (Luxembourg)
fr-MC fr-MC French (Principality of Monaco)
gl gl-ES Galician
gl-ES gl-ES Galician (Galician)
gu gu-IN Gujarati
gu-IN gu-IN Gujarati (India)
he he-IL Hebrew
he-IL he-IL Hebrew (Israel)
hi hi-IN Hindi
hi-IN hi-IN Hindi (India)
hr hr-HR Croatian
hr-BA hr-BA Croatian (Bosnia and Herzegovina)
hr-HR hr-HR Croatian (Croatia)
hu hu-HU Hungarian
hu-HU hu-HU Hungarian (Hungary)
hy hy-AM Armenian
hy-AM hy-AM Armenian (Armenia)
id id-ID Indonesian
id-ID id-ID Indonesian (Indonesia)
is is-IS Icelandic
is-IS is-IS Icelandic (Iceland)
it it-IT Italian
it-CH it-CH Italian (Switzerland)
it-IT it-IT Italian (Italy)
ja ja-JP Japanese
ja-JP ja-JP Japanese (Japan)
ka ka-GE Georgian
ka-GE ka-GE Georgian (Georgia)
kk kk-KZ Kazakh
kk-KZ kk-KZ Kazakh (Kazakhstan)
kn kn-IN Kannada
kn-IN kn-IN Kannada (India)
ko ko-KR Korean
kok kok-IN Konkani
kok-IN kok-IN Konkani (India)
ko-KR ko-KR Korean (Korea)
ky ky-KG Kyrgyz
ky-KG ky-KG Kyrgyz (Kyrgyzstan)
lt lt-LT Lithuanian
lt-LT lt-LT Lithuanian (Lithuania)
lv lv-LV Latvian
lv-LV lv-LV Latvian (Latvia)
mi-NZ mi-NZ Maori (New Zealand)
mk mk-MK Macedonian
mk-MK mk-MK Macedonian (Former Yugoslav Republic of Macedonia)
mn mn-MN Mongolian
mn-MN mn-MN Mongolian (Cyrillic, Mongolia)
mr mr-IN Marathi
mr-IN mr-IN Marathi (India)
ms ms-MY Malay
ms-BN ms-BN Malay (Brunei Darussalam)
ms-MY ms-MY Malay (Malaysia)
mt-MT mt-MT Maltese (Malta)
nb-NO nb-NO Norwegian, Bokmal (Norway)
nl nl-NL Dutch
nl-BE nl-BE Dutch (Belgium)
nl-NL nl-NL Dutch (Netherlands)
nn-NO nn-NO Norwegian, Nynorsk (Norway)
no nb-NO Norwegian
ns-ZA ns-ZA Northern Sotho (South Africa)
pa pa-IN Punjabi
pa-IN pa-IN Punjabi (India)
pl pl-PL Polish
pl-PL pl-PL Polish (Poland)
pt pt-BR Portuguese
pt-BR pt-BR Portuguese (Brazil)
pt-PT pt-PT Portuguese (Portugal)
quz-BO quz-BO Quechua (Bolivia)
quz-EC quz-EC Quechua (Ecuador)
quz-PE quz-PE Quechua (Peru)
ro ro-RO Romanian
ro-RO ro-RO Romanian (Romania)
ru ru-RU Russian
ru-RU ru-RU Russian (Russia)
sa sa-IN Sanskrit
sa-IN sa-IN Sanskrit (India)
se-FI se-FI Sami (Northern) (Finland)
se-NO se-NO Sami (Northern) (Norway)
se-SE se-SE Sami (Northern) (Sweden)
sk sk-SK Slovak
sk-SK sk-SK Slovak (Slovakia)
sl sl-SI Slovenian
sl-SI sl-SI Slovenian (Slovenia)
sma-NO sma-NO Sami (Southern) (Norway)
sma-SE sma-SE Sami (Southern) (Sweden)
smj-NO smj-NO Sami (Lule) (Norway)
smj-SE smj-SE Sami (Lule) (Sweden)
smn-FI smn-FI Sami (Inari) (Finland)
sms-FI sms-FI Sami (Skolt) (Finland)
sq sq-AL Albanian
sq-AL sq-AL Albanian (Albania)
sr sr-Latn-CS Serbian
sr-Cyrl-BA sr-Cyrl-BA Serbian (Cyrillic) (Bosnia and Herzegovina)
sr-Cyrl-CS sr-Cyrl-CS Serbian (Cyrillic, Serbia)
sr-Latn-BA sr-Latn-BA Serbian (Latin) (Bosnia and Herzegovina)
sr-Latn-CS sr-Latn-CS Serbian (Latin, Serbia)
sv sv-SE Swedish
sv-FI sv-FI Swedish (Finland)
sv-SE sv-SE Swedish (Sweden)
sw sw-KE Kiswahili
sw-KE sw-KE Kiswahili (Kenya)
syr syr-SY Syriac
syr-SY syr-SY Syriac (Syria)
ta ta-IN Tamil
ta-IN ta-IN Tamil (India)
te te-IN Telugu
te-IN te-IN Telugu (India)
th th-TH Thai
th-TH th-TH Thai (Thailand)
tn-ZA tn-ZA Tswana (South Africa)
tr tr-TR Turkish
tr-TR tr-TR Turkish (Turkey)
tt tt-RU Tatar
tt-RU tt-RU Tatar (Russia)
uk uk-UA Ukrainian
uk-UA uk-UA Ukrainian (Ukraine)
ur ur-PK Urdu
ur-PK ur-PK Urdu (Islamic Republic of Pakistan)
uz uz-Latn-UZ Uzbek
uz-Cyrl-UZ uz-Cyrl-UZ Uzbek (Cyrillic, Uzbekistan)
uz-Latn-UZ uz-Latn-UZ Uzbek (Latin, Uzbekistan)
vi vi-VN Vietnamese
vi-VN vi-VN Vietnamese (Vietnam)
xh-ZA xh-ZA Xhosa (South Africa)
zh-CN zh-CN Chinese (People's Republic of China)
zh-HK zh-HK Chinese (Hong Kong S.A.R.)
zh-CHS (none) Chinese (Simplified)
zh-CHT (none) Chinese (Traditional)
zh-MO zh-MO Chinese (Macao S.A.R.)
zh-SG zh-SG Chinese (Singapore)
zh-TW zh-TW Chinese (Taiwan)
zu-ZA zu-ZA Zulu (South Africa)