一个触摸屏应用,客户需要输入汉字。刚刚装上《逍遥笔4.0》,现在希望实现点击界面某个按钮时输入法自动切换到《消遥笔》输入法状态。请问怎样实现?

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Collections;
    using Microsoft.Win32;public class Ime
    {
        [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;    public Ime()
        {
            // 
            // TODO: 在此处添加构造函数逻辑 
            // 
        }    //设定当前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;
        }
    }
      

  2.   

    LZ只要在GOOGLE中输入"C#控制输入法"就能找到答案
      

  3.   

    private void button1_Click(object sender, EventArgs e)
    {
                InputLanguage il = GetDesiredInputLanguage("逍遥笔 4.0 版");
                if (il == null)
                {
                    InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
                    MessageBox.Show("未能找到");
                }
                textBox1.Select();
                InputLanguage.CurrentInputLanguage = il;
                
    }
    public static InputLanguage GetDesiredInputLanguage(string layoutName)
    {
                InputLanguageCollection ilc = InputLanguage.InstalledInputLanguages;            foreach (InputLanguage il in ilc)
                {
                    if (il.LayoutName == layoutName)
                        return il;
                }
                return null;
    }
      

  4.   

    请问楼上的:
    if (il.LayoutName == layoutName)   这句中的字符串是怎么比较的,就算看起来一样怎么还是不执行下面的这一句: return il; 
     
    谢谢!!!!