/*
參考來源:
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;
}
}
}
分享到:
相关推荐
C#实现输入法功能详解 本文主要介绍了C#实现输入法的相关知识,详细介绍了三种方式:IMM、TSF以及外挂式。IMM这种方式是调windows的一些底层api,不过在新版本的windows中基本上已经不能用了,属于一种过时的操作...
在IT领域,特别是软件开发中,使用C#语言来控制当前输入法是一个非常实用且具有技术挑战性的功能。本文将详细解析如何利用C#来实现对当前输入法的控制,使得用户无需手动进行输入法的切换,从而提高用户体验和应用...
在IT领域,编程语言C#被广泛用于开发各种应用程序,包括操作系统级别的组件,例如输入法。本主题聚焦于如何利用C#实现中文和五笔输入法。这两种输入法在中国及华人社区中非常常见,中文输入法允许用户通过键入汉字...
Wenli.IEM是一个开源的C#输入法项目,其特色在于轻量级、可扩展和高度自定义。项目源代码托管在GitHub上,开发者可以通过访问获取。该项目的核心特性包括: 1. 支持拼音和五笔输入:提供两种主流的中文输入方式,...
在C#编程环境中,设置输入法是一个涉及到Windows操作系统交互的过程,通常用于开发具有特定输入法需求的桌面应用程序。本文将详细讲解如何在C#中实现输入法的切换和管理。 首先,我们需要理解输入法是如何在Windows...
在C#中开发Windows应用程序时,有时我们需要集成输入法功能,以便用户能够使用他们习惯的输入方式输入文本。本文将详细介绍如何在C# Windows程序窗体中调用本地输入法。 首先,理解基础:Windows操作系统提供了标准...
在C#编程中,获取和设置输入法是常见的任务,特别是在开发涉及用户输入交互的应用程序时。本篇文章将深入探讨如何在C#环境下实现这一功能,主要关注如何获取当前活动的输入法以及如何切换不同的输入法。 首先,我们...
C# 写的模拟键盘的动态库,利用了keybd_event函数。可以设置输入法。
这可能是包含一个或多个TSF输入法示例的文件,比如C++或C#的源代码文件,或者是包含详细步骤的说明文档。如果这是一个源代码文件,那么开发者可以通过阅读和运行代码,了解TSF输入法的实现机制和API调用方式。 总的...
C#T9输入法是一款基于C#编程语言开发的、具备可更换皮肤功能的输入法软件。这款输入法不仅提供了高效、便捷的文字输入体验,还允许用户根据个人喜好定制界面风格,增强了用户的个性化使用感受。对于C#初学者以及想要...
本文将深入探讨如何利用C#来设置应用程序的输入法,并且讲解如何捕获用户在运行时改变输入法的行为。这对于开发需要特定输入法环境的应用程序,或者需要对用户输入进行特殊处理的场景尤其重要。 首先,我们要了解...
在本文中,我们将深入探讨如何使用C#编程语言来实现设置和获取计算机上的输入法功能。C#是一种广泛应用于Windows应用程序开发的高级编程语言,它提供了丰富的类库和API,使得开发者能够方便地与操作系统进行交互,...
在C#编程环境中,开发人员经常需要处理与操作系统交互的任务,其中包括切换和管理输入法。在Windows操作系统中,用户可以通过多种方式输入文本,如英文、拼音、五笔、仓颉等,这些不同的输入方式被称为输入法。本篇...
Unity3d C# 实现UGUI软键盘输入,实现中文、英文输入都支持。 建议先看说明:https://blog.csdn.net/qq_33789001/article/details/119329690 支持单字打字,没有个人的偏好、兴趣的设置,也没有使用频率等信息,所以...
在C#编程环境中,开发人员经常需要处理与用户交互的各种任务,其中之一就是管理系统的输入法。这个场景下,我们讨论的是如何使用C#来获取计算机上安装的所有输入法,并允许用户选择和设置他们想要使用的输入法。这在...
在C#编程环境中,控制输入法是一项常见的需求,特别是在开发涉及用户输入的桌面应用程序时。本文将详细探讨如何在C#中实现这一功能,并通过具体的代码示例进行解释。 首先,我们要了解`InputLanguage`类在.NET ...
在C#编程中,有时我们需要处理非拉丁字符集,如维吾尔文,但并不希望依赖特定的输入法。这通常涉及到字符编码和字符串处理的知识。维吾尔文使用Unicode编码,因此理解Unicode以及如何在C#中正确处理它是非常重要的。...
标题 "C# 笔画输入法 五画的方式" 指的是使用C#编程语言开发的一种基于汉字笔画的输入法,特别是采用五画分类方法。在中文输入法中,五画输入法是一种常见的技术,它根据汉字的基本笔画(横、竖、撇、捺、折)来输入...
本项目聚焦于C#中的拼音汉字互转类,这是一个关键功能,对于创建自定义输入法尤其有用。在描述中提到,这个工具适用于触摸屏环境,解决了Win7和Win10系统自带触摸输入法可能存在的不便,允许开发者在自己的应用程序...