IME介绍

Windows 输入法编辑器 (IME) Windows 输入法编辑器 (IME)原著 :Microsoft一、关于 Windows 混合语言 IME在 Windows 中 ,IME 是一个动态链接库 (DLL),与 Windows 3.1 远东版本 IME 不同的是 ,每一个运行的 IME 相当于混合语言键盘布局中的一种。与 Windows 3.1 IME 相比较 ,Windows 混合语言 IME 提供下列增强功能 :●运行时相当于混 阅读详情

IME 中包括一个引擎(它可以把按键转换为语音和象形字符),还包括一个由常用象形文字组成的词典。当用户敲击按键时,IME 引擎会尝试判断应将其转换为哪个或哪些象形字符。由于许多象形字符具有相同的发音,因此 IME 引擎的第一次判断可能不是完全正确的。如果建议的字符不正确,用户可以从同音列表中进行选择;在一些更先进的 IME 中,用户选中的同音字会变为 IME 引擎下一轮判断时的首选字符。

 

MicrosoftDeveloper Network (MSDN) 文档(位于 http://msdn.microsoft.com)和编程 API 用一种名为“输入法区域设置标识符”的变量类型代表输入语言,它在先前的文档中被称为“键盘布局处理”(HKL) 并且现在仍被用作类型标识符。HKL 是一种古老的名称,当时只能从键盘进行输入。输入法区域设置标识符名称是一个 32 位的值,它由语言标识符(低 WORD)和设备标识符(高 WORD)的十六进制值组成。(参见下方的图 7。)例如,美国英语的语言标识符为 0x0409,因此美国英语主布局被命名为 "00000409"。美国英语布局的变体(例如 Dvorak 布局)被命名为 "00010409"、"00020409" 等。设备标识符并不仅限于键盘和 IME;现在可通过一些较复杂的机制(例如语音和文字识别引擎)来输入数据。例如,在 Windows XP 中作为一种系统服务提供的 Microsoft Windows Text Services Framework (TSF),它可以实现与来源无关的高级文字输入。

处理输入语言最简单的方式是在需要用户输入的所有场合都使用操作系统提供的标准控件。例如,通过使用 Unicode 编辑控件或 Rich edit 控件,可以使应用程序能够处理多种语言的文字输入。操作系统会以一种对应用程序透明的方式自动处理输入语言。文字 API 使用的是一种标准的多行编辑控件,它可以避免处理输入语言时的麻烦。

 

对于一些需要完全控制输入语言处理方式的高级应用程序(例如文本编辑器),它们应该监视(并能够响应)用户的改动。当用户通过单击任务栏上的语言指示符或按下“左边 Alt+Shift”键来选择某种输入语言时,输入语言不会自动改变– 两个操作都会生成一个活动的应用程序必须接受或拒绝的请求。为了响应热键组合或鼠标单击任务栏上的语言指示符后产生的事件,系统会向焦点窗口发送一个 WM_INPUTLANGCHANGEREQUEST 消息,如下图所示。如果应用程序接受该消息并将其传递给 DefWindowProc,系统将启动切换输入语言的操作并发送一个 WM_INPUTLANGCHANGE 消息。如果输入法是 Text Services Framework (TSF) 的一部分,则此过程会略有不同,这时只发送 WM_INPUTLANGCHANGE。当系统成功完成改变后,会生成一个 WM_INPUTLANGCHANGE 消息。WM_INPUTLANGCHANGE 消息的 lParam 变量包含新输入语言的输入法区域设置标识符(即 HKL)。

不支持多语言的应用程序会拒绝 WM_INPUTLANGCHANGEREQUEST 消息。它可能会拒绝任何或全部WM_INPUTLANGCHANGEREQUEST 消息,也可能会先执行一些测试。例如,此消息的 wParam 变量是一个 Boolean 值 bLangInSystemCharset,它将指出请求的输入语言是否能够在当前的系统区域设置中呈现出来。在处理 Unicode 应用程序时呈现输入语言并不麻烦,但是,非 Unicode 应用程序应该监视此值(实际上也是如此),否则它们会显示错误的字符。

 

与生成 WM_INPUTLANGCHANGEREQUEST 消息来响应用户请求的系统类似,应用程序也会通过调用 ActivateKeyboardLayout API 来启动改变输入语言的操作。

 

(注:win7系统似乎已经抛弃HKL,所有HKL有关的API在win7系统下似乎全部失效)

 

Windows 2000 和 Windows XP 中的 IME 模块适合于向应用程序传递用户输入信息的大型机制,而且像其他输入法一样,最简单、最安全的输入内容处理方式是使用标准系统控件,例如编辑字段和 Rich edit 控件等。如果您不是要编写 IME 软件包或自定义自己的 IME 用户界面 (UI),您可以使用标准输入 API,它可以为您处理 IME 的所有复杂情况。

 

对某种输入语言来说,是使用 IME 还是使用键盘来输入对用户而言都完全透明。无论用户是切换 IME 还是西方键盘布局,过程都完全相同。这两种操作都是通过单击任务栏上的语言指示符或输入某个快捷键组合来完成。而且,应用程序不关心使用的输入法,因为切换 IME 与切换键盘布局会生成同样的消息:WM_INPUTLANGCHANGEREQUEST(如果 IME 不是 TSF 的一部分)和WM_INPUTLANGCHANGE。应用程序可通过调用 ActivateKeyboardLayout 来激活特定的 IME。IMM 可以作为中介来管理 IME与应用程序之间的通信。当用户使用 IME 键入信息时,每个按键都发出一条带有 GCS_COMPSTR 标记的 WM_IME_COMPOSITION 消息,指出合成字符串有更新。消息的 WPARAM 值将返回字符串的第一个字符,其余字符可以通过带有相同 GCS_COMPSTR 标记的 ImmGetCompositionString API 进行检索。然后当用户按下 Enter 键或单击某个字符在文档中放置它时,默认情况下,IME 会发出一条带有 GCS_RESULTSTR 标记的 WM_IME_COMPOSITION 消息。(您可以使用相同的 API 和 GCS_RESULTSTR 标记来检索提交的字符串。)如果后面的 WM_IME_COMPOSITION 消息被发送到 DefWindowProc,则对于所提交字符串中的每个字符,它都会发出一条包含实际字符的 WM_IME_CHAR 消息。对于非 Unicode 窗口,如果 WM_IME_CHAR 消息包括一个双字节字符并且应用程序将此消息传递给 DefWindowProc,则 IME 会将此消息转换为两条 WM_CHAR 消息,每条包含双字节字符中的一个字节。如果应用程序略过任何一条消息,则它将由应用程序的 DefWindowProc 函数进行处理,此函数会通知 IMM 该消息被忽略。IME 然后会通过多个 WM_CHAR 消息逐字节重新发送字符或字符串。对于 Unicode 窗口,WM_IME_CHAR 和 WM_CHAR 是相同的。

 

以下各节将讨论对于 Windows 中所运行应用程序的三个离散的 IME 支持级别:不支持、部分支持和完全自定义的支持。应用程序可以小规模自定义 IME 支持(例如通过重新定位窗口),也可以彻底改变 IME UI 的外观。

 

无 IME 支持:不识别 IME 的应用程序通常会忽略所有特定于 IME 的 Windows 消息。大多数针对单字节语言的应用程序不能识别 IME。

 

不识别 IME 的应用程序会通过预定义的全局类(对应被称为 "IME")来继承活动 IME 的默认 UI。这一全局类具有与基于 Windows 的任何其他常用控件相同的特性。对于每个线程而言,Windows 2000 和 Windows XP 都会根据 IME 全局类自动创建一个窗口,所有不识别 IME 的线程窗口都会共用此默认的 IME 窗口。不识别 IME 的应用程序将关于 IME 的消息传递给 DefWindowProc 函数时,DefWindowProc 会将其发送到默认 IME 窗口。

 

部分 IME 支持:识别 IME 的应用程序可以创建其自己的 IME 窗口。部分支持 IME 的应用程序可以使用此应用程序 IME 窗口来控制特定的 IME 行为。例如,通过调用函数 ImmIsUIMessage,应用程序可以将与 IME 的 UI 相关的消息传递给应用程序的 IME 窗口,应用程序可以在这里处理这些消息。允许应用程序变更窗口位置或属性的其他 API 函数包括 ImmSetCandidateWindow、ImmSetCompositionFont、ImmSet-CompositionString、ImmSetCompositionWindow以及 ImmSetStatusWindowPos。包含部分 IME 支持的应用程序可使用这些函数来设置 IME UI 窗口的样式和位置,但是 IME 动态链接库 (DLL) 仍负责绘制这些窗口– IME UI 的常规外观将保持不变。

 

完全 IME 支持则截然不同,完全识别 IME 的应用程序将接管通过 IME DLL 绘制 IME 窗口(状态、复合以及候选窗口)的工作。此类应用程序可以完全自定义这些窗口的外观,包括确定其屏幕位置以及选择使用哪些字体和字体样式来显示窗口中的字符。对于文字处理程序以及主要功能是文字处理的类似程序,这会使它们从流畅的 IME 交互以及创建“自然的”用户交互界面中受益,因此显得特别方便和有效。IME DLL 仍将决定在 IME 复合窗口和候选窗口中显示的字符,并且它还会运用算法来猜测字符并在 IME 字典中查找它们。

 

 

 

名词解释

HIMC : handle to inputcontext           输入上下文句柄

HKL:          handleto keyboard layout       Input localeidentifier       键盘布局句柄

HWND:handle to window     窗口句柄

 

消息

WM_IME_NOTIFY:发送应用程序的变化通知到IME窗口。

wParam

命令,这个参数可以有如下的值

IMN_CHANGECANDIDATE      //候选字列表变化

IMN_CLOSECANDIDATE         //候选字列表

IMN_CLOSESTATUSWINDOW

IMN_GUIDELINE

IMN_OPENCANDIDATE   //打开候选字列表

IMN_OPENSTATUSWINDOW

IMN_SETCANDIDATEPOS

IMN_SETCOMPOSITIONFONT

IMN_SETCOMPOSITIONWINDOW

IMN_SETCONVERSIONMODE   //转换模式的变化

IMN_SETOPENSTATUS

IMN_SETSENTENCEMODE

IMN_SETSTATUSWINDOWPOS


WM_IME_COMPOSITION:IME把修改组成状态(composition status)作为按键的结果发送给应用程序。

GCS_COMPATTR

GCS_COMPCLAUSE

GCS_COMPREADSTR

GCS_COMPREADATTR

GCS_COMPREADCLAUSE

GCS_COMPSTR                           组合字符串

GCS_CURSORPOS

GCS_DELTASTART

GCS_RESULTCLAUSE

GCS_RESULTREADCLAUSE

GCS_RESULTREADSTR

GCS_RESULTSTR                          结果字符串

 

Lib支持:

Imm32.lib

输入法编辑器(IME)程序设计(1) 头一次发译的东西,肯定会有不少错误,请大家多多斧正。本人志在编写中国最出色的输入法,解放中国人的双手。今从零起步,朝成夕可死也。 Input Method EditorAn input method editor (IME) is a program that allows computer users to enter complex characters and symbols, such a 阅读详情

相关推荐

WM_IME_CHAR 与WM_CHAR的区别

要理解二者的区别,首先需要清楚: 我们通过键盘所打的字,并不都是全部通过输入法后,转交给程序的。 也就是说: 我们用键盘打的字有些是不经过输入法直接传送到程序中,如1、2、3这样的数字 还有ABC英文字母,回车 空格等 有些是经过输入法转交给程序的,如中文 明白这点后,WM_IME_CHAR与WM_CHAR

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 1万+

自定义输入法窗口位置

在项目开发中,可能需要根据需要控制输入法窗口的位置,可以采用下面方法 if (uMsg == WM_IME_COMPOSITION) { // 解决微软输入法位置异常的问题 HIMC hIMC = ImmGetContext(m_hWnd); if (hIMC) { // Set composition window position near caret posi

zzstack的专栏 2559

delphi 自动打开输入法(搜狗)

delphi 自动打开输入法(搜狗) 在一个文本编辑窗口输入时,自动打开中文输入法(热键 Alt+A),默认打开=》【中文 (简体) - 搜狗拼 音输入法】。

输入法IME简介

输入法编辑器篇 输入法编辑器(IME)是允许用户使用标准键盘输入复杂字母与符号,如日文汉字的程式。本文描述创建及管理IME(input method editor)视窗的方法。 1、输入法编辑器简介 IME 不是检索用户可能用到的所字符值,而是监控用户的按键,来预料用户可能需要的字符,并提供一张备择字符列表以供用户从中选出所需字符。   默认情况下,IME为用户提供一个可以

nonumber1989的专栏 2206

WM_CHAR.rar_WM CHAR_WM_CHAR _WM_NETCONNECT pudn_wm-char

字符串的形式拦截键盘的信息,这样的信息更容易处理,对于初学者来说是比较容易实现的键盘编程。

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测_2026-02-26

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测作为一名编程小白,我目前正在学习编译和运行 Qt 框架,也在逐步摸索开发环境的配置方法,目标是打造一款属于自己的个人效率工具。就在这时,我挖到了一个国家级硬核福利:国家超算互联网核心节点开放免费试运行!哪怕是零基础如我,也能申领到 100 卡时异构加速卡算力,关键是——2 月底前申请更稳妥,早占位早使用。

qq_58517981的博客 2102

输入法编辑器(IME)编程指南

输入法编辑器(IME)编程指南   以下是IME编程中需要用到的几项基本组成元素:   •  IME函数    •  IME消息    •  IME命令    •  IME结构   •  IME常量 IME函数   本节列出了所有IME函数。 函数 说明 EnumInputContext 由应用程序定义的,提供给ImmEn

trandy的专栏 1万+

2026开源API网关横评:微服务与AI流量治理如何选型

API网关作为微服务架构的流量入口,承担着路由转发、安全管控、限流熔断等核心职责,是分布式系统治理的基础设施。随着大模型应用的普及,AI流量对网关提出了新的要求,如流式响应支持、Token级限流、多模型路由和成本分账等能力。传统网关通过插件拼凑AI功能,而AI原生网关则将这些能力内建。面对众多开源方案,如何根据业务场景做出合理选型?本文对Kong、APISIX、Higress、Envoy Gateway、MAI Gateway等主流开源API网关进行横向评测,从性能、动态性、K8s集成度、AI流量治理等维度

weixin_34242819的博客 482

IME编程心得

一、基础知识:(不断补充)1.输入法管理器(IMM)2.输入法编程器(IME)3.输入上下文(IC)4.应用程序(App)二、IMM-IME结构的基本工作过程及特点用户键盘消息->系统通过IMM传递给与当前线程对应的IME->IME根据输入的消息和输入上下文中记录的数据,将用户的键盘动作转换成结果串->以字串消息的形式返回给IMM->放到应用程序窗口的消息队列中。三

panstrgh的专栏 4752

Android音频学习(十四)——加载音频设备

loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。

miemie2014的博客 1731

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 417

IME消息

在UI窗口下需要处理下列windows消息.WM_IME_SETCONTEXT激活或休眠输入法:如果fSet为TRUE,系统将激活当前输入法的某个窗口(状态窗、列表窗等),为FALSE时休眠当前输入法.其中lISCBits中指出对哪个窗口操作。 数值 含义

千金甜果的专栏 4468

别再为下载速度发愁了!手把手教你给qBittorrent/Transmission添加最新可用Tracker(附2024年实测地址清单)

本文提供2024年BT下载加速实战指南,详细解析Tracker工作原理与速度瓶颈,手把手教你为qBittorrent/Transmission添加最新可用Tracker,并附实测地址清单。通过优化配置和精选Tracker列表,显著提升下载速度和稳定性,解决连接延迟和peer数量限制问题。

weixin_28481133的博客 1262

IME 消息 函数 常量

IME消息   以下列出IME中用到的消息。 WM_IME_CHAR(IME得到了转换结果中的一个字符) WM_IME_COMPOSITION(IME根据用户击键的情况更改了按键组合状态) WM_IME_COMPOSITIONFULL(IME检测到按键组合窗口的区域无法继续扩展) WM_IME_CONTROL(由应用程序直接向IME发出控制请求) WM_IME_ENDCOMPOSITION(IME完成了对用户击键情况的组合) WM_IME_KEYDOWN(检测到“键盘上的某键被按下”的动作,同时在消息队列中

sayyoume8220202的专栏 677

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5564

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?

我是香菜 3万+

Android中的IME

学习Android,SDK里的文档是一份很好的材料。但是官方的都是英文的呀。对于我这样的英语白痴,这样的文档真心只想看一遍。所以这次就把看到的翻译成中文,以便以后可以查看。水平有限,翻译的不准,请参看原文。  附上原文地址:  http://developer.android.com/guide/topics/text/creating-input-method.html     学习的是C

androidlab 1万+

CAPL诊断功能实现

UDS(Unified Diagnostic Services)是一种用于汽车电子系统诊断的标准协议。它定义了一系列诊断服务,用于读取和写入车辆电子控制单元(ECU)中的数据,以及处理诊断故障码(DTC)。UDS协议通常运行在CAN总线上,使用ISO 15765-2(ISO-TP)协议进行数据传输。通过本文的学习,读者应该对CAPL诊断功能实现有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1516

两篇关于IME的文章

Input Method Editors: Using an IME in a Game IME Sample: Demonstrates How to Control IME Mode and Implement IME Level 3

itclock的专栏 994

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ime输入法android,创建输入法  |  Android 开发者  |  Android Developers

输入法 (IME) 是一种可让用户输入文本的用户控件。Android 提供了一种可扩展的输入法框架。借助该框架,应用可以为用户提供备选输入法,例如屏幕键盘,甚至语音输入。安装所需的 IME 后,用户可以从系统设置中选择要使用的 IME,并在整个系统中使用该 IME;同时只能启用一个 IME。如要向 Android 系统添加 IME,您需要创建一个 Android 应用,其中包含一个扩展本指南涵盖以...

weixin_29693211的博客 880

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IME输入法编程 第四章

    在UI窗口下需要处理下列windows消息.2006-01-14作者 不祥 在UI窗口下需要处理下列windows消息.1、WM_IME_SETCONTEXT激活或休眠输入法LRESULT CALLBACK UIWndProc(HWND hUIWnd,UINT uMsg,WPARAM wParam,LPARAM lPara

独自登高楼 望断天涯路 2965

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

用日语输入表情符号的 IME 扩展词典

???? 用日语输入表情符号的 IME 扩展词典 ???? 项目介绍 在日常的数字交流中,表情符号(Emoji)已经成为了一种不可或缺的表达方式。然而,许多用户在使用非 GitHub 或 Slack 的应用时,往往无法像在这些平台上那样便捷地输入表情符号。为了解决这一问题,我们推出了这个开源项目——用日语输入表情符号的 IME 扩展词典。 这个项目允许用户通过日语输入法(IME)直接输入表情符号,无需依赖特定...

gitblog_00130的博客 472

IMM\IME \IME WINDOW

Input Method Manager (IMM) is a technology used by an application to communicate with an input method editor (IME), which runs as a service. The IME allows computer users to enter complex characters a

hellochenlian的专栏 3120
上一篇: ID3DXSprite
下一篇: Win32 API 常量定义(一)
trandy
博客等级 码龄17年 79粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值