`

在应用程序中精确切换输入法

阅读更多

如果在你的程序里需要输入很多的内容,比如各类单据,如果在进入每一个录入框的时候都能自动把输入法切换到合适的状态将会是一个很酷的特性,相比炫丽的界面而言打字到手抽筋的录入人员们对此会更加感兴趣。在winform中切换输入法是很简单的事情:

            foreach (InputLanguage iL in InputLanguage.InstalledInputLanguages)
{
if (iL.LayoutName == "智能ABC")
{
InputLanguage.CurrentInputLanguage
= iL;
break;
}
}
<!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com -->

 

这样子就能很轻松的吧输入法切换到智能ABC了。

但是这样子的效果是不完美的,这个方法不能指定IME的状态,也就是IME的转换状态。这个概念是只有远东地区的windows才存在的状态,因为对于英语国家来说输入根本不存在输入法,而法语,俄语等拉丁语系的拼音文字的语言都只需要简单的修改键映射关系就行了,只有受中文影响的东亚地区有输入法的概念,比如日文和朝鲜文,为了方便输入,这些IME中都有很多状态,比如微软日文输入法:

image

日文输入包含了全角半角平假名,全角半角片假名等录入的状态,还包括了:

image

普通,名字,对话和不转换四种假名到当用汉字的转换模式

 

 

汉语的输入法简单一些,不存在对汉字的转换,不过也存在为了中英交替录入(牛逼哄哄的日本人喜欢用片假名替换英文所以不存在交替录入)而存在的中英录入模式转换,中英标点符号装换,还有全角半角的转换:

image

如果是用的很古老的智能ABC的话,那么还存在双打和标准模式的切换。

对于这些五花八门的输入法中的输入模式,如果在选择了确定要输入法,同时也要确定要唯一定位到输入的模式,那么 InputLanguage 类的功能就捉襟见肘了。

在windows的文字服务IMM中对IME提供了ConvertionStatus的接口来确定输入法的工作模式,在Win32API中就是

ImmGetConversionStatus和ImmSetConversionStatus

这两个函数都有三个参数,一个是输入法IME的句柄,一个是mode,一个是sentence,最重要的就是mode和sentence这两个参数了,他们就是确定输入法状态的数据。经过测试发现,每个输入法的值都不一样,所以看MSDN去解析这两个int变量所对应的枚举值有哪些意义完全没必要,太复杂了,而我们只需要精确的切换到某个模式,只需要记录下这些模式下mode和sentence的值就行了。

下面是中文输入法的状态和mode值的对应关系表

双打模式(包括单双混合,比如微软输入法)

输入法状态 mode值
中文输入-半角-中文符号 -2147482623
中文输入-全角-中文符号 -2147482615
中文输入-半角-英文符号 -2147483647
中文输入-全角-英文符号 -2147483639
英文输入-半角-中文符号 -2147482624
英文输入-全角-中文符号 -2147482616
英文输入-半角-英文符号 -2147483648
英文输入-全角-英文符号 -2147483640

 

标准模式(全拼模式,比如智能ABC的标准模式)

输入法状态 mode值
中文输入-半角-中文符号 1025
中文输入-全角-中文符号 1033
中文输入-半角-英文符号 1
中文输入-全角-英文符号 9
英文输入-半角-中文符号 1024
英文输入-全角-中文符号 1032
英文输入-半角-英文符号 0
英文输入-全角-英文符号 8

 

由于不同的输入法对于模式的支持不同,比如搜狗支持的是标准模式,但是由于本身的功能又可以双打,但是设置模式却要用标准模式的值,而微软拼音是双打模式,而和同在双打模式智能ABC的sentence值又不一样,所以还是要根据具体的输入法测试后决定用什么数值来实现转换。

附1:

转换的代码:

首先注册Win32API的方法

        [DllImport("imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hWnd);

[DllImport(
"imm32.dll")]
public static extern bool ImmGetConversionStatus(IntPtr hIMC,
ref int conversion, ref int sentence);

[DllImport(
"imm32.dll")]
public static extern bool ImmSetConversionStatus(IntPtr hIMC, int conversion, int sentence);
<!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com -->

 

            foreach (InputLanguage iL in InputLanguage.InstalledInputLanguages)
{
if (iL.LayoutName == "中文(简体)-搜狗拼音输入法")
{
InputLanguage.CurrentInputLanguage
= iL;
break;
}
}
IntPtr prt
= ImmGetContext(this.Handle);
int iMode = 1033;
int iSentence = 0;
if (!ImmSetConversionStatus(prt, iMode, iSentence))
{
MessageBox.Show(
"change error");
}
<!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com -->

 

这样就能把输入法确定为搜狗拼音,且为全角的数字符号和英文,且标点符号为中文标点。

附2:

日文输入法的值

日文输入法的假名和全半角模式由mode值控制

模式 mode 值
DirectInput 25
Hiragana 25
Full Width Katakana 27
Full Width Alphanumeric 24
Half Width Katakana 19
Half Width Alphanumeric 16

 

当用汉字的转化模式由 sentence 的值控制

模式
8
1
16
0

 

附三:

棒子国输入法………没有用过,省略了吧

分享到:
评论

相关推荐

    如何在程序中切换输入法程序(

    在VB.NET编程环境中,我们经常会遇到需要在应用程序中控制用户输入法的需求,特别是在开发具有多语言支持或特定输入要求的应用时。本篇文章将详细讲解如何在Visual Studio的VB.NET项目中实现输入法程序的切换,并...

    .net下数字全角转半角

    `在应用程序中精确切换输入法__net教程网.htm`可能讲解了如何在.NET应用中控制用户的输入法状态,确保正确处理全角和半角字符。 `C#全角半角转换函数 - _NET技术 - ITPUB个人空间 - powered by X-Space.htm`提供了...

    UnityUGUI模拟中文输入法

    Unity UGUI 模拟中文输入法是Unity引擎中利用UGUI系统实现的一种用户界面功能,它允许用户在游戏或应用中通过输入英文字符来联想并输入中文。在Unity引擎中,UGUI(Unity User Graphic Interface)是官方提供的图形...

    Qt实现中英文键盘,支持各种嵌入式平台

    Qt是一个跨平台的应用程序开发框架,广泛用于创建桌面、移动以及嵌入式设备的图形用户界面。本主题将详细讲解如何使用Qt来实现一个功能完备的中英文键盘,以满足在各种嵌入式平台上进行文本输入的需求。 首先,让...

    CS2005中winfrm解决输入法自动全角到半角转换 回车光标到下一个控件

    在.NET Framework 2.0(通常简称为CS2005)中开发Windows Forms应用程序时,开发者可能会遇到一些与输入法交互的问题。标题所提到的“winfrm解决输入法自动全角到半角转换 回车光标到下一个控件”涉及到两个常见的...

    Delphi 输入法绑定

    理解并掌握这个技术,能够提升应用程序的专业性和用户体验,特别是在需要精确控制输入法的场合。 总的来说,Delphi输入法绑定涉及Windows API的使用,需要开发者对系统级编程有一定了解。通过合理运用这些技术,...

    win7内码输入法

    1. **启动内码输入法**:安装后,用户可以通过任务栏的语言栏选择此输入法,或者在设置中添加和切换到内码输入法。 2. **输入方法**:用户通常需要知道汉字的内码,通常是区位码(每个汉字由一个区号和一个位号组成...

    XP输入法调整工具

    在XP系统中,由于各种应用程序的差异,输入法的位置可能会被遮挡或者显得不协调,这时"XP输入法位置调整工具"就能发挥它的作用。用户可以通过该工具自定义输入框的位置,使之更符合个人的操作习惯,提高打字效率。 ...

    input_method输入法测试

    在IT领域,输入法是操作系统或应用程序中一个至关重要的组件,它允许用户通过键盘、触屏或其他输入设备输入汉字、字母、数字等字符。输入法测试是对这一功能进行的系统性和全面性的验证过程,确保其在各种场景下都能...

    激活指定输入法.zip易语言项目例子源码下载

    通过易语言编写的程序可以轻松实现对输入法的精确控制,这对于需要在特定操作中使用特定输入法的软件来说尤为关键。例如,对于设计到中文打字、专业术语输入或特定语言的输入场景,程序可能需要强制切换到特定的...

    云手写输入法.rar

    在实际应用中,云手写输入法通常会集成在操作系统、移动设备或特定的应用程序中。例如,在智能手机和平板电脑上,用户可以通过触控笔或者手指在虚拟屏幕上写字;在电脑上,可以配合触控屏或手写板使用。这些设备通常...

    搜狗拼音输入法,输入法!

    搜狗拼音输入法是一款广受欢迎的中文输入法软件,尤其在个人电脑和移动设备上有着广泛的应用。它以其高效、智能的特性,为用户提供了流畅的汉字输入体验。这款输入法的核心功能在于将用户的拼音输入转化为准确的汉字...

    计算机应用基础统考模拟试卷5.pdf

    在安装这些应用程序时,最常见且官方推荐的方法是通过“控制面板”内的“添加/删除程序”功能进行。这一过程通常需要用户运行应用程序自带的安装程序(.exe文件),之后系统会自动引导用户完成安装。这种方式相比...

    计算机应用基础第二次作业答案.doc

    - **目的**:方便用户快速切换输入法,提高输入效率。 ### 8. MUA(Mail User Agent) - **定义**:MUA,即邮件用户代理,是指用户用来发送、接收电子邮件的软件。 - **功能**: - 发送和接收电子邮件。 - 管理...

    易语言学习-eIme支持库静态版.zip

    它可能包含了各种输入法相关的函数和组件,如切换输入法、获取当前输入状态、发送自定义按键等,方便开发者编写与输入法交互的自动化脚本或应用程序。 自动化是现代软件开发和IT服务中的重要环节,无论是按键精灵...

    Android高级应用源码-Android 4.0风格中文滚动输入.rar

    在Android系统中,输入法是一个系统服务,通过InputMethodManager与应用程序交互。源码中涉及到了如何创建自定义的输入法服务,以及如何处理键盘事件,实现中文字符的输入。 3. **文本输入与滚动机制** 滚动输入...

    《计算机算机应用基础》网考综合练习题.pdf

    - Ctrl+Shift: 组合键,用于在输入时切换输入法或输入特殊字符。 - Shift+Space: 组合键,用于在文本输入中切换全角和半角状态。 - Ctrl+Space: 组合键,用于在输入时切换中文和英文输入法。 - PgUp、PgDn: 键盘上的...

    2021计算机应用基础考试真题卷(4).docx

    - 控制面板中的“添加/删除程序”选项主要用于安装或卸载应用程序,而不是设置字体、显示属性或管理未知新设备(如题2)。 3. 桌面图标的管理: - 用户可以通过鼠标拖动图标来调整其在桌面上的位置,也可以通过...

    Qt5开发的Word程序

    【Qt5开发的Word程序】是一个使用Qt5框架构建的应用程序,它旨在提供类似Microsoft Word的文字处理功能。Qt5是一个跨平台的C++图形用户界面应用程序开发框架,它支持多种操作系统,如Windows、Linux和macOS。这个...

    ABB机器人设置有效载荷的2种方法具体步骤(直接输入法+自动识别推算法2).docx

    ABB机器人在进行搬运任务时,设置有效载荷(Loaddata)是至关重要的步骤。有效载荷包括工具和负载的重量以及重心位置,这些参数的准确性...在实际应用中,根据具体情况选择合适的方法,以实现最佳的机器人工作效果。

Global site tag (gtag.js) - Google Analytics