如题

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;namespace InputLanguageSwitch
    {
        /// <summary>
        /// 获取系统所有的输入法,并可以程序改变当前输入法;打开关闭软键盘。
        /// </summary>
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                //this.InputLanguageChanged += new InputLanguageChangedEventHandler(Form1_InputLanguageChanged);
            }        //void Form1_InputLanguageChanged(object sender, InputLanguageChangedEventArgs e)
            //{
            //    //throw new Exception("The method or operation is not implemented.");
            //    for( int i=0;i<comboBox1.Items.Count;i++)
            //    {
            //        if (InputLanguage.CurrentInputLanguage.LayoutName == comboBox1.Items[i].ToString())
            //        {
            //            comboBox1.SelectedIndex = i;
            //        }        //    }
            //}        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                string strTemp = comboBox1.Items[comboBox1.SelectedIndex].ToString(); 
                InputLanguageCollection collects = InputLanguage.InstalledInputLanguages;
                for (int i = 0; i < collects.Count; i++)
                {
                    if (collects[i].LayoutName == strTemp)
                        InputLanguage.CurrentInputLanguage = collects[i];
                }
                
            }        private void Form1_Load(object sender, EventArgs e)
            {
                InputLanguageCollection collects = InputLanguage.InstalledInputLanguages;
                for (int i = 0; i < collects.Count; i++)
                {
                    comboBox1.Items.Add(collects[i].LayoutName);
                }
                comboBox1.SelectedIndex = collects.IndexOf(InputLanguage.CurrentInputLanguage);
            }        private void button1_Click(object sender, EventArgs e)
            {
                this.textBox1.Focus();
                IntPtr hwndInput = ImmGetContext(this.Handle);
                IntPtr dw1 = IntPtr.Zero;
                IntPtr dw2 = IntPtr.Zero;
                bool isSuccess = ImmGetConversionStatus(hwndInput, ref dw1, ref dw2);
                if (isSuccess)
                {
                    int intTemp = dw1.ToInt32() & IME_CMODE_SOFTKBD;
                    if (intTemp > 0)
                        dw1 = (IntPtr)(dw1.ToInt32() ^ IME_CMODE_SOFTKBD);
                    else
                        dw1 = (IntPtr)(dw1.ToInt32() | IME_CMODE_SOFTKBD);
                }
                isSuccess = ImmSetConversionStatus(hwndInput, dw1, dw2);
                ImmReleaseContext(this.Handle, hwndInput);
            }        public const int IME_CMODE_SOFTKBD = 0x80;        [DllImport("imm32.dll", EntryPoint = "ImmGetContext")]
            public static extern IntPtr ImmGetContext(
                    IntPtr hwnd
            );
            [DllImport("imm32.dll", EntryPoint = "ImmGetConversionStatus")]
            public static extern bool ImmGetConversionStatus(
                    IntPtr himc,
                    ref IntPtr lpdw,
                    ref IntPtr lpdw2
            );
            [DllImport("imm32.dll", EntryPoint = "ImmSetConversionStatus")]
            public static extern bool ImmSetConversionStatus(
                    IntPtr himc,
                    IntPtr dw1,
                    IntPtr dw2
            );        [DllImport("imm32.dll", EntryPoint = "ImmReleaseContext")]
            public static extern int ImmReleaseContext(
                    IntPtr hwnd,
                    IntPtr himc
            );       }
    }
    我也是从网上拷贝过来的,测试可以用,你自己拷贝一下试试