怎样用C#控制输入法切换? 一个触摸屏应用,客户需要输入汉字。刚刚装上《逍遥笔4.0》,现在希望实现点击界面某个按钮时输入法自动切换到《消遥笔》输入法状态。请问怎样实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; }} LZ只要在GOOGLE中输入"C#控制输入法"就能找到答案 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;} 请问楼上的:if (il.LayoutName == layoutName) 这句中的字符串是怎么比较的,就算看起来一样怎么还是不执行下面的这一句: return il; 谢谢!!!! C#中给控件注册事件后,如何传递参数~! 关键路径和最短时间 动态控件触发事件互不影响的问题 如何利用sqlcommand的Parameters.add,向float的字段中插入null? enter键响应click事件 C#新手菜鸟问题,望高手解答! 反射赋值数组搞不定。 请教!在操作多个数据库时,除了选择com+的事务,可以使用连接事务吗? 请问table的合并行、列的问题 请给一个HOOK的例子?比如键盘热键? 请问:如何为DLL设置配置文件? 多线程访问ListViewItem的问题
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;
}
}
{
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;
}
if (il.LayoutName == layoutName) 这句中的字符串是怎么比较的,就算看起来一样怎么还是不执行下面的这一句: return il;
谢谢!!!!