C# 輸入法

简介: /* 參考來源: 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:/
/*
 參考來源:
 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;
        }
    }
}

目录
相关文章
|
Web App开发 监控 Linux
在Linux上,有许多软件可以下载和安装
在Linux上,有许多软件可以下载和安装
425 67
|
11月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
295 12
刘谦春晚纸牌魔术背后的数学—海明码原理简介
刘谦春晚纸牌魔术背后的数学—海明码原理简介
|
监控 安全 UED
星型拓扑的缺点是什么?
【8月更文挑战第4天】
1068 16
星型拓扑的缺点是什么?
|
传感器 物联网 5G
5G的三大主要特性:解锁未来无限可能
5G的三大主要特性:解锁未来无限可能
1759 1
|
机器学习/深度学习 人工智能 监控
阿里云的大数据计算引擎应用场景
阿里云的大数据计算引擎应用场景
|
人工智能 Swift 决策智能
社区供稿 | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
在 2024 年 7 月 4 日的 WAIC 科学前沿主论坛上,上海人工智能实验室推出了书生·浦语系列模型的全新版本——InternLM2.5。
|
前端开发 JavaScript 编译器
【性能革命】Angular Ivy编译器:一场前端开发者的极速盛宴,揭秘应用瘦身与提速的黑科技,让你的Angular项目焕发新生的终极指南
【8月更文挑战第31天】Angular Ivy编译器是Angular团队推出的更新,旨在改善应用性能,减少构建时间和代码量。自Angular 9起,Ivy成为默认编译器。本文通过案例分析,介绍Ivy的工作原理及其优势。以一个复杂应用为例,展示了Ivy如何通过减少生成的JavaScript代码量、优化模板表达式解析等方式提升性能。通过创建示例项目并比较启用与未启用Ivy的构建结果,证明了Ivy在构建速度和文件大小上的显著改进,同时提高了运行时性能。这对于追求高性能和快速开发的应用至关重要。
228 0
|
缓存 Java API
【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数
【Azure 服务总线】详解Azure Service Bus SDK中接收消息时设置的maxConcurrentCalls,prefetchCount参数
195 0
|
SQL 存储 Oracle
oracle发展史
oracle发展史
460 0

热门文章

最新文章