输入法_输入法注入 - CSDN
精华内容
参与话题
  • 精灵输入法 程序员专用输入法 可以快速输入代码 带提示输入
  • 目的:安装搜狗中文输入法 步骤: Ctrl + Alt + T起一个终端 1. sudo apt --fix-broken install 1. sudo apt install fcitx 2. 左下角 -> Settings -> Region&Language -> Manage Install ...

    系统环境:Ubuntu18.04

    目的:安装搜狗中文输入法

    步骤:

    Ctrl + Alt + T起一个终端

    1. sudo apt --fix-broken install

        sudo apt install fcitx

    2. 左下角 -> Settings -> Region&Language -> Manage Install Languages

    选择如图fcitx -> Apply System-Wide,重启电脑!!

     

     

    3. 重启后,选择右上角键盘->Confiture Current Input Method

    4. 点击下面的‘+’ ,找到自己的Sogou Pinyin(我这里已经加过了,所有没有显示)

     

     

    5. 最终的效果如图

    特别注意!!!!一定不要把Sougou Pinyin放到第一个,会由于繁体字的原因导致不必要的乱码错误!!!!!!!!!!

    展开全文
  • 一直想写一点关于输入法编程的东西,今天终于有点时间,希望对后来者有点帮助。在此要特别感谢“自由拼音”的作者李振春,我刚开始的几个问题都是在他的帮助下才解决。  首先我们需要明白输入法是什么东西。目前...

      一直想写一点关于输入法编程的东西,今天终于有点时间,希望对后来者有点帮助。在此要特别感谢“自由拼音”的作者李振春,我刚开始的几个问题都是在他的帮助下才解决。

      首先我们需要明白输入法是什么东西。目前常用的输入法基本上有两种类型:外挂式(如早期的万能五笔)及输入法接口式(Input Method Editor-IME)。外挂式比较简单,就是一个exe文件,通过模拟一些Windows输入消息来给当前处于活动状态的编辑窗口输入文字,一个显著的优点是输入法只要启动一次,就可以在所有进程中使用;但缺点不不容忽视,首先实现起来也不容易,一个更大的不足是兼容性不够好,通常一个Windows版本需要一人对应的输入法版本,此外这类输入法为了能够截获用户输入,通常需要挂接键盘钩子,容易造成系统不稳定或者效率不高。大部分的输入法还是采用IME来实现,下面本文主要讨论一下IME编程需要注意的问题及解决办法。

      IME是什么?IME是在Windows平台上使用的标准的输入法接口规范。它实质是一个DLL,Windows为这个DLL定义一系列的接口,不同的接口实现指定的功能。程序员在编写输入法程序时只需要实现这些接口并导出就可以作为输入法使用。关于具体接口的定义不是本文的重点,如果您需要了解只需要在网络中搜索“输入法编程指南”就可以明白 ,更多信息参考MSDN。

      刚开始输入法编程最棘手的问题通常是程序框架搭好了却不知道如何使用及调试。这里涉及到一个很重要的问题就是输入法的安装。输入法就是Windows的一个插件,需要先进行注册,Windows才能识别并使用。为此您需要先将您生成的DLL复制到系统目录(WindowsSystem32)再调用API ImmInstallIME就可以实现了,在我的实践中是先编一个简单的程序来做安装工作,在每次输入法重新编译完成以后调用一次以完成输入法的注册。这里还有一个需要注意的问题是:Windows提供了一种机制,它允许输入法程序一旦启动就就不再退出,这就意味着如果你的程序代码经过修改需要重新安装时将不得不重新启动电脑。在IME定义的接口中有一个接口是提供IME的初始化的,它就是BOOL WINAPI ImeInquire(LPIMEINFO lpIMEInfo,LPTSTR lpszUIClass,LPCTSTR lpszOption),下面的代码来自我写的输入法:

      BOOL WINAPI ImeInquire(LPIMEINFO
    lpIMEInfo,LPTSTR lpszUIClass,LPCTSTR lpszOption)
    {
      lpIMEInfo->dwPrivateDataSize = sizeof(CONTEXTPRIV);//系统根据它为INPUTCONTEXT.hPrivate分配空间
      lpIMEInfo->fdwProperty = IME_PROP_KBD_CHAR_FIRST |
    #ifdef _UNICODE
      IME_PROP_UNICODE |
    #endif
      IME_PROP_SPECIAL_UI |
      IME_PROP_END_UNLOAD ;
      lpIMEInfo->fdwConversionCaps = IME_CMODE_FULLSHAPE |
      IME_CMODE_NATIVE;
      lpIMEInfo->fdwSentenceCaps = IME_SMODE_NONE;
      lpIMEInfo->fdwUICaps = UI_CAP_2700;
      lpIMEInfo->fdwSCSCaps = 0;
      lpIMEInfo->fdwSelectCaps = SELECT_CAP_CONVERSION;
      _tcscpy(lpszUIClass,CLSNAME_UI);
      return TRUE;
    }

    lpIMEInfo->fdwProperty告诉Windows系统您编写的输入法的一些特征,注意一下IME_PROP_END_UNLOAD这个标志,有了它您编写的输入法会随着启动您的输入法的应用程序(如NotePad)的退出而退出,否则它将长驻于系统中,这也是为什么很多输入法在升级安装时需要首先重新启动电脑的原因。

      在这个接口中还有一点需要特别注意,那就是lpIMEInfo->dwPrivateDataSize,至少我是经过很多次测试才基本证实Windows根据该值为INPUTCONTEXT.hPrivate分配空间。此外如果您修改了这个接口,按照我个人的经验是需要重新调用ImmInstallIME来安装。

      在安装完成后,在输入法列表中应该已经有了您自己的输入法。点击调试,由于它是一个DLL,您需要先选择一个宿主程序,一般选择“记事本”,以调试方式启动“记事本”后,在这个“记事本”中打开您的输入法,您就可以在源代码中设置断点了。需要说明的是,VC6.0调试DLL不太好用,首先需要打上SP5或者SP6,这样也不能够在DLL启动的时候就设置断点,推荐使用.net来调试。

    输入法上下文(HIMC):HIMC是什么?在输入法编程时必然要接触到输入法上下文这个术语,刚接触时听起来实在是半懂不懂。由于输入法是一个插件,它需要和调用它的应用程序通讯,在输入法中生成的编码及重码信息保存在哪里应用程序才能正确的读取呢?答案就在于输入法上下文。输入法上下文是由User.exe(一个系统进程)为应用程序分配的内存句柄,在应用程序中启动的输入法在这块内存中写入数据,User.exe再将数据传递到应用程序。

      UIWnd:在IME中需要导出一个接口,原型如LRESULT WINAPI UIWndProc(HWND hUIWnd, UINT message,WPARAM wParam, LPARAM lParam),hUIWnd是由User.exe传过来的窗口句柄,它是输入法中创建的窗口如编码窗口,重码窗口,状态栏窗口的宿主(Owner),初学输入法编程的人可能会问这个窗口显示在哪里呢?其实它并不是一个普通的窗口,它只是一个用来传递Windows消息的窗口(Message Only),在使用时,您不需要关心它在哪里,只需要使用它就好了。

      一个IME需要导出19个(Win98版本)接口,但是对于一个只需要实现一般意义的文字输入的软件,您只需要实现几个基本的接口就可以让输入法正常工作了。下面逐一介绍一下这几个接口。

    /**********************************************************************/
    /* ImeSelect() */
    /* Return Value: */
    /* TRUE - successful, FALSE - failure */
    /**********************************************************************/
    BOOL WINAPI ImeSelect(HIMC hIMC,BOOL fSelect)
    在这个接口中,系统通知输入法当前是否打开了输入法输入。一般输入法启动时会调用一次,在一些软件(如EmEditor)中提供打开与关闭输入法的功能就是通过这个接口实现的。如果打开输入法,一般会在这个接口中做一些数据的初始化工作。/***********************************************************************/
    /*系统调用这个接口来判断IME是否处理当前键盘输入 */
    /*HIMC hIMC:输入上下文 */
    /*UINT uKey:键值 */
    /*LPARAM lKeyData: unknown */
    /*CONST LPBYTE lpbKeyState:键盘状态,包含256键的状态 */
    /*return : TRUE-IME处理,FALSE-系统处理 */
    /*系统则调用ImeToAsciiEx,否则直接将键盘消息发到应用程序 */
    /**********************************************************************/
    BOOL WINAPI ImeProcessKey(HIMC hIMC,UINT uKey,LPARAM lKeyData,CONST LPBYTE lpbKeyState)

    观察注释您可以看到在个接口是用来判断用户敲击的哪个键需要处理,哪个键又应该交给系统自己处理,如果输入法需要自己处理用户输入的键,则在这个接口中返回true,否则返回false。/****************************************************************************************************************/
    /* function:应用程序调用这个接口来进行输入上下文的转换,输入法程序在这个接口中转换用户的输入 */
    /* UINT uVKey:键值,如果在ImeInquire接口中为fdwProperty设置了属性IME_PROP_KBD_CHAR_FIRST,则高字节是输入键值*/
    /* UINT uScanCode:按键的扫描码,有时两个键有同样的键值,这时需要使用uScanCode来区分 */
    /* CONST LPBYTE lpbKeyState:键盘状态,包含256键的状态 */
    /* LPDWORD lpdwTransKey:消息缓冲区,用来保存IME要发给应用程序的消息,第一个双字是缓冲区可以容纳的最大消息条数 */
    /* UINT fuState:Active menu flag(come from msdn) */
    /* HIMC hIMC:输入上下文 */
    /* return : 返回保存在消息缓冲区lpdwTransKey中的消息个数 */
    /****************************************************************************************************************/
    UINT WINAPI ImeToAsciiEx (UINT uVKey,UINT uScanCode,CONST LPBYTE lpbKeyState,LPDWORD lpdwTransKey,UINT fuState,HIMC hIMC)
    这个接口可以说是输入法最重要的部分,程序员需要在这个接口中实现编码与重码的转换,转换完成或者显示在编码窗口及重码窗口,或者发送到应用程序。由于在这个接口中没有传入窗口句柄,如果通知输入法程序的窗口更新显示呢?当然我们可以使用全局变量,在此我个人推荐的方法是使用IME消息(没有什么道理),您将消息类型、参数保存到lpdwTransKey指示的缓冲区中,User.exe会根据消息类型做相应的处理并传递到UIWnd这个窗口中。

      那么如何输入文字呢?要输入文字需要3个消息配合使用,分别是WM_IME_STARTCOMPOSITION、WM_IME_COMPOSITION和WM_IME_ENDCOMPOSITION,它们分别指示开始输入编码,输入编码或者结果(视参数而异)及编码输入完成。在开始编写输入法的时候,为了省事,我的输入法在用户确定要输入一个重码时才连续调用这3个消息以向编码器中输入文字。由于WM_IME_STARTCOMPOSITION和WM_IME_ENDCOMPOSITION需要成对使用,这种方法可以确保它们配对。最初这种方式工作得很好,但是后来发现在一些软件中出现兼容性问题。如“智能五笔”在“遨游”中就存在这个问题,在“遨游”中的地址栏中打开“智能五笔”,当需要使用回退键来删除错误输入的编码时,会发现删除的不是编码窗口中的编码而是编辑器中的文字。这是因为类似“遨游”这类软件主动接管了按键输入如处理一些控制键,当它发现这些控制键不在WM_IME_STARTCOMPOSITION和WM_IME_ENDCOMPOSITION这两个消息之间时就自己处理控制键而不是先交给User.exe了。因此正确的流程应该是在开始输入编码时发送WM_IME_STARTCOMPOSITION,输入结束后发送WM_IME_ENDCOMPOSITION消息。

    /**********************************************************************/
    /* UIWndProc() */
    /* IME UI window procedure */
    /**********************************************************************/
    LRESULT WINAPI UIWndProc(HWND hUIWnd, UINT message,WPARAM wParam, LPARAM lParam)
    这是一个非常重要的接口,基本上一它负责各种消息的传递。一般您需要在这个接口中根据不同的消息类型,实现输入法窗口(如编码窗口、重码窗口、状态栏窗口)的显示、隐藏及更新等操作。这个接口实现的功能可能非常复杂,视情况而异,在此就不做更加深入的说明了。在使用时可以参见示例工程。BOOL WINAPI ImeConfigure(HKL hKL,HWND hWnd, DWORD dwMode, LPVOID lpData)这是最后一个需要注意的接口,在显示输入法属性配置时会Windows会调用这个接口。

      基本的接口就介绍到这里,下面谈一谈我个人在编写输入法程序时遇到的一些问题或者发现的一些需要注意的地方。

      1、关于输入法窗口:阅读一些输入法的代码会奇怪,为什么输入法窗口在创建时需要指定WM_DISABLE属性呢?原来是因为如果不指定这个属性标志,在打开输入法时,会导致当前的应用程序失去输入焦点。但是指定了这个标志后,输入法窗口不能收到鼠标消息怎么办?解决的方法就在于WM_SETCURSOR这个消息。这个消息不管窗口是否可用,只要有鼠标在窗口内窗口都会收到。您可以在这个消息中模拟鼠标消息也可以选择调用SetCapture这个函数,这样窗口就可以收到鼠标消息了。

      2、关于窗口模式:使用了几种输入法后,你会发现,有的输入法的编码窗口和重码窗口是一个窗口,有的又是两个窗口,它们有什么区别?或者有的人会觉得这个问题很可笑,但是当您研究了一段输入法可能就会发现您也有类似的问题:因为在输入法的导出接口中关于用户界面的函数就有4个,其它3个分类对应3个窗口回调函数。事实上它们并没有本质的区别,关键在于您的输入法的使用范围。一些软件(如某些游戏)为了界面的整体美观,不希望用户在打开输入法时显示输入法自己的窗口,而是希望输入法按照它的意愿将输入法窗口需要显示的内容显示在它创建的窗口中,英文称之为IME Aware。由于我自己的输入法目标不是在游戏中使用,所在并没有按照这个规矩来管理输入法窗口,而是为了简化,将编码窗口和重码窗口显示的内容放到了一个窗口中。

      3、关于自定义消息:UIWndProc在WM_IME_NOTIFY中提供了一个IMN_PRIVATE,最初我理解为这个消息应该和WM_USER一样,当我需要不只一人自定义消息时只需要在这个ID的基础上增加值就好了。但事实是您定义的值可能是系统已经占用的(视Windows的版本而异),您能够使用的自定义消息应该只有这一个,为了指示多个消息类型,我使用的方法是在WM_IME_NOTIFY的LPARAM中进行区分。

      4、调试信息输出:一般编写输入法都不会使用MFC,为了输出调试信息,一般只能使用OutputDebugString这个API,在示例代码中的helper.c中我编写了一个模拟TRACE的函数Helper_Trace,您可以用这个函数来将调试信息输出到调试窗口。

      5、最后再谈一谈输入法类型:前面提到输入法分为外挂式和IME两种,但是目前一些输入法发展了第3种类型,那就是结合这两种类型的优点。例如拼音加加,启动拼音加加您会发现进程列表里会多一个拼音加加的服务进程,其实它才是拼音加加输入法的内核即数据处理部分。拼音加加的IME部分只是一个外壳,它提供传统的IME输入法一样的系统兼容性。在我的输入法中也采用了这种结构,使用内存文件映射及普通的Windows消息结合来实现两个进程间的通讯。您可以在我的输入法的源代码中找到进程间的通讯源代码及输入法代码。

      好象没有更多的经验可言,总之,输入法其实并不神秘,在我看来,只要能够在VC中跟踪代码,我就不相信我会搞不定它!

      一家之言,如果有什么错误,还请大家批评指正。

      关于示例代码:示例代码是我编写的一个最基本的输入法程序的框架,它显示您输入的编码,并显示一个固定的重码,输入空格后实现该重码上屏的功能。通常我们能找到的代码是一个完整的工程,这样对于初学输入法编程的人可能会陷入大量的非输入法编码框架的阅读中,对于实际的输入法编程并没有多大的意义。这份代码就是为了让您摆脱那些无谓代码的阅读。

      如果需要更加完整的输入法代码,推荐参考“自由拼音”的源代码,当然也可以参考我写的输入法《启程输入之星》的代码,您可以在我的网站上找到下载,http://www.setoutsoft.cn。这份代码的界面部分我自认为是当前的输入法中写得非常出色的。

    展开全文
  • 输入法比较

    2018-06-21 10:24:34
    讯飞输入法和捷通输入法比较,讯飞输入法汉字联想不准确,捷通输入法工作人员不积极
    讯飞输入法和捷通输入法比较,讯飞输入法汉字联想不准确,捷通输入法工作人员不积极
    展开全文
  • 谷歌拼音输入法

    万次阅读 2019-05-20 17:30:28
    谷歌输入法1,下载谷歌输入法 1,下载谷歌输入法 点击撤下下载谷歌拼音输入法
    展开全文
  • linux安装中文输入法

    万次阅读 2018-09-27 21:21:52
    一~ubuntu系统安装中文输入法(centos系统请直接跳到下面二) 安装输入法 下面任选一种即可: 1.IBus拼音:sudo apt-get install ibus-pinyin (sudo 以超级权限去执行下面操作,apt-get install 安装一个新...
  • 输入法

    2020-05-09 19:13:44
    一.u模式:以u’开头(一般输入法自动添加’,可不输入) 1.拆分输入:将一个字拆分成几部分分别输入拼音 各拼音间用’分隔 u'拼音1'拼音2... 2.笔画输入:将字拆分成笔画按顺序(字的笔顺)输入 横(h),竖(s),撇(p ),捺(n...
  • Ubuntu18.04启用中文输入法

    万次阅读 多人点赞 2018-07-01 21:43:50
    Ubuntu18.04发布了,但是搜狗输入法目前尚未支持。 而18.04自带的中文输入法选择sunpinyin为预设中文输入引擎,但是并没有将sunpinyin放入iso镜像中。详情参考18.04 从镜像开机无法输入中文的问题(已解决) 将...
  • 在Ubuntu中配置中文输入法

    万次阅读 多人点赞 2020-06-29 15:53:25
    找到设置 选择区域和语言 点击Manage Installed ... ... 5.将Chinese(simplified)勾选上 ...6. 在输入源中点击+号,选中里面的汉语,再选中里面的汉语(Intelligent Pinyin),添加即可,并将其移动到第一位。...
  • 首先安装fcitx一、检测是否安装fcitx首先检测是否有fcitx,因为搜狗拼音依赖fcitx> fcitx提示:程序“fcitx”尚未安装。 您可以使用以下命令安装:> sudo apt-get install fcitx-bin二、安装fcitxsudo...
  • Ubuntu 安装中文输入法

    万次阅读 多人点赞 2020-08-18 19:59:34
    fctix 是一个以 GPL 方式发布的输入法框架,安装 fctix 后可以为操作系统的桌面环境提供一个灵活的输入方案,解决在 GNU/Linux 环境下安装中文输入法的问题。 win + a 打开所有应用程序,找到 Language ...
  • 写在发现谷歌拼音输入法网站消失的今天

    万次阅读 热门讨论 2020-03-30 10:14:02
    今天偶然发现谷歌拼音输入法PC版的网页消失了,我想以后可能都不会有了,除非谷歌重返大陆。 PC端的谷歌拼音输入法从2013年就已经停止更新,但这并不妨碍我继续使用它,之前它的官网也一直都在,也提供下载。 之...
  • Ubuntu18.04下安装搜狗输入法

    万次阅读 多人点赞 2019-04-28 08:11:58
    其次,上搜狗输入法官网下载Linux版本搜狗输入法(32位和64位根据自己情况,在虚拟机上用浏览器下载即可 然后进入相应的下载目录,进行安装(安装过程中如果有错,运行sudo apt --fix-broken install) 安装...
  • 但是当你输入中文的时候,输入法也会有候选词,这时候↓键j就会冲突了。 附图: 解决方法 经过查找compositionstart和compositionend这两个方法刚好满足需求。 简单的说一下这两个方法的属性。 compositionstart ...
  • Ubuntu如何安装搜狗输入法

    万次阅读 多人点赞 2019-05-05 12:08:21
    1、ubuntu系统配置 system settings->language support->... 2、配置输入法框架 ...搜狗输入法是建立在fcitx框架之上的,所以要将输入法框架选择为fictx, 注意:如果没有fcitx选项,那么你就需...
  • CentOS 7.0 安装中文输入法

    万次阅读 多人点赞 2018-12-27 10:44:39
    安装的时候没有设置,现在找到之后记录下:  (我这个是已经设置完后的截图,所以,Input Sources中,有拼音输入选项)  Applications -- System Tools -- Setting -- Regin & Language ...
  • MDCC 2016 中国移动开发者大会前夕,iOS 开发峰会演讲嘉宾——搜狗输入法 iOS 版负责人李腾杰接受 CSDN 专访,分享了其与团队在第三方输入法开发与优化方面的经验,以及搜狗输入法 iOS 版开发团队在新技术与一线项目...
  • 假设有如下界面(输入法的上面的输入区域是用Dialog实现的)要求当输入法关闭的时候,Dialog也一起关闭,这样用户就不需要返回两次了。网上找了很多资料都没有很好的解决这个问题,输入法是第三方程序,确实不好检测...
  • Android输入法开发

    万次阅读 2017-02-06 17:14:51
    输入法编辑器(IME)是一个便于用户输入文本的控件。Android提供了一个可扩展的输入法框架,允许应用程序提供可替代的输入法,比如屏幕上的键盘或者语音输入。在安装 输入法后,用户可以通过系统选项选择想要使用的...
  • Android输入法架构学习总结

    万次阅读 2016-11-20 10:38:27
    此文为本人学习输入法之后所做的一个总结报告。与大家分享。   安卓输入法框架(Input Method Framework)IMF 一.输入法框架简介   自Android平台1.5版本以后,Google开放了 Android平台输入法框架(InputMethod ...
1 2 3 4 5 ... 20
收藏数 144,260
精华内容 57,704
关键字:

输入法