我的系统里的默认输入法是 《微软拼音简捷》(而不是英文法输入法),用 ImmIsIME 检测的结果:它也是中文输入法(和其它输入法类似,它也要用“Shift”切

mansohu 2015-02-16 05:22:44
我的系统里的默认输入法是 《微软拼音简捷》(而不是英文法输入法),用 ImmIsIME 检测的结果:它也是中文输入法(和其它输入法类似,它也要用“Shift”切换中英文)。请问如果我不了解各种输入法的快捷键使用,也不了解系统里都有哪些输入法,我应该如何用代码直接切换到默认输入法中的“英文输入”呢?谢谢!
...全文
569 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-02-26
  • 打赏
  • 举报
回复
引用 2 楼 PctGL 的回复:
试试: Private Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal Hwnd As Long, ByVal himc As Long) As Long ImmAssociateContext text1.hwnd , ByVal 0& 参考:

Private Declare Function ImmCreateContext Lib "imm32.dll" () As Long
Private Declare Function ImmDestroyContext Lib "imm32.dll" (ByVal himc As Long) As Long
Private Declare Function ImmGetContext Lib "imm32.dll" (ByVal Hwnd As Long) As Long
Private Declare Function ImmGetCompositionString Lib "imm32.dll" Alias "ImmGetCompositionStringW" (ByVal himc As Long, ByVal dw As Long, lpv As Any, ByVal dw2 As Long) As Long
Private Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal Hwnd As Long, ByVal himc As Long) As Long
Private Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal Hwnd As Long, ByVal himc As Long) As Long
Private Declare Function ImmSetCompositionWindow Lib "imm32.dll" (ByVal himc As Long, lpCompositionForm As COMPOSITIONFORM) As Long
'Private Declare Function ImmSetStatusWindowPos Lib "imm32.dll" (ByVal himc As Long, lpPoint As POINTAPI) As Long
'Private Declare Function ImmGetStatusWindowPos Lib "imm32.dll" (ByVal himc As Long, lpPoint As POINTAPI) As Long
'Private Declare Function ImmGetCompositionWindow Lib "imm32.dll" (ByVal himc As Long, lpCompositionForm As COMPOSITIONFORM) As Long
Private Const GCS_RESULTSTR As Long = &H800&
Private Const SS_SIMPLE As Long = &HB


'   ime.n_himc = ImmCreateContext                                      '创建新的输入法上下文,这只是个直译,实际意义是在输入法接受窗口序列中增加一个新的入口,这里先行登记
   hinst = ImmGetContext(.s_ParentForm.Hwnd)                           '获取一个已创建的窗口对应线程的输入法上下文,如无特殊,一般情况下,父窗口的输入法状态为默认,则是有输入法上下文的
   If hinst = 0 Then hinst = ImmCreateContext: PG.ime_himc = hinst     '碰到及特殊的情况,没有... 那只能创建一个了
   ImmAssociateContext .n_Handle, ByVal hinst&                         '设置窗口的输入法状态,这里的意义是以怎样的输入法状态来对待指定的窗口,传 0 是禁用输入法

'  利用不同的 himc , 可以实现不同的输入法预选状态,例如 Text 控件的 imemode 就是以如此形式出现的,当然代码会更为复杂

'***
'***  关于输入法状态,启用\禁用 的资料
'***
'    输入上下文存储了IME的状态信息,它是IME的内部结构。对于每一个线程,系统创建和分配了一个默认的输入上下文, _
'    在线程内的每个窗口都共享输入上下文的内容。具体输入上下文的结构体定义包含在标题为"INPUTCONTEXT"的帮助文档中。 _
'    从文档中看出,输入上下文包含对应窗口句柄、写作窗口和候选窗口和状态窗口的位置、字体、消息缓冲区等等。 _
'    用函数ImmGetContext可以得到指定窗口对应的输入上下文的句柄。用 ImmReleaseContext释放指定的输入上下文。 _
'    如果不希望一个线程内的窗口都共享同一个输入上下文,那么可以调用函数 ImmCreateContext来创建一个新的上下文, _
'    并调用函数ImmAssociateContext将新创建的输入上下文与指定的窗口关联。当不用这个新创建的上下文时, _
'    调用ImmDestroyContext来释放内存。调用函数ImmLockIMC能够得到一个指定的输入上下文的指针, _
'    通过这个指针可以访问输入上下文的数据。访问结束后调用函数ImmUnlockIMC,ImmUnlockIMC减少计算锁数量, _
'    直到释放句柄。
'
'    如果没有必要我们不必查询上下文资料,直接利用 WM_IME_(Start)COMPOSITION 消息进行汉字输入
'
'    有了上面两句代码,我们的控件就可以接受输入法了,但没有对输入数据进行整理是不能够得到汉字的


学习了。
mansohu 2015-02-25
  • 打赏
  • 举报
回复
还请各位老师指导!谢谢!
PctGL 2015-02-25
  • 打赏
  • 举报
回复
试试: Private Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal Hwnd As Long, ByVal himc As Long) As Long ImmAssociateContext text1.hwnd , ByVal 0& 参考:

Private Declare Function ImmCreateContext Lib "imm32.dll" () As Long
Private Declare Function ImmDestroyContext Lib "imm32.dll" (ByVal himc As Long) As Long
Private Declare Function ImmGetContext Lib "imm32.dll" (ByVal Hwnd As Long) As Long
Private Declare Function ImmGetCompositionString Lib "imm32.dll" Alias "ImmGetCompositionStringW" (ByVal himc As Long, ByVal dw As Long, lpv As Any, ByVal dw2 As Long) As Long
Private Declare Function ImmAssociateContext Lib "imm32.dll" (ByVal Hwnd As Long, ByVal himc As Long) As Long
Private Declare Function ImmReleaseContext Lib "imm32.dll" (ByVal Hwnd As Long, ByVal himc As Long) As Long
Private Declare Function ImmSetCompositionWindow Lib "imm32.dll" (ByVal himc As Long, lpCompositionForm As COMPOSITIONFORM) As Long
'Private Declare Function ImmSetStatusWindowPos Lib "imm32.dll" (ByVal himc As Long, lpPoint As POINTAPI) As Long
'Private Declare Function ImmGetStatusWindowPos Lib "imm32.dll" (ByVal himc As Long, lpPoint As POINTAPI) As Long
'Private Declare Function ImmGetCompositionWindow Lib "imm32.dll" (ByVal himc As Long, lpCompositionForm As COMPOSITIONFORM) As Long
Private Const GCS_RESULTSTR As Long = &H800&
Private Const SS_SIMPLE As Long = &HB


'   ime.n_himc = ImmCreateContext                                      '创建新的输入法上下文,这只是个直译,实际意义是在输入法接受窗口序列中增加一个新的入口,这里先行登记
   hinst = ImmGetContext(.s_ParentForm.Hwnd)                           '获取一个已创建的窗口对应线程的输入法上下文,如无特殊,一般情况下,父窗口的输入法状态为默认,则是有输入法上下文的
   If hinst = 0 Then hinst = ImmCreateContext: PG.ime_himc = hinst     '碰到及特殊的情况,没有... 那只能创建一个了
   ImmAssociateContext .n_Handle, ByVal hinst&                         '设置窗口的输入法状态,这里的意义是以怎样的输入法状态来对待指定的窗口,传 0 是禁用输入法

'  利用不同的 himc , 可以实现不同的输入法预选状态,例如 Text 控件的 imemode 就是以如此形式出现的,当然代码会更为复杂

'***
'***  关于输入法状态,启用\禁用 的资料
'***
'    输入上下文存储了IME的状态信息,它是IME的内部结构。对于每一个线程,系统创建和分配了一个默认的输入上下文, _
'    在线程内的每个窗口都共享输入上下文的内容。具体输入上下文的结构体定义包含在标题为"INPUTCONTEXT"的帮助文档中。 _
'    从文档中看出,输入上下文包含对应窗口句柄、写作窗口和候选窗口和状态窗口的位置、字体、消息缓冲区等等。 _
'    用函数ImmGetContext可以得到指定窗口对应的输入上下文的句柄。用 ImmReleaseContext释放指定的输入上下文。 _
'    如果不希望一个线程内的窗口都共享同一个输入上下文,那么可以调用函数 ImmCreateContext来创建一个新的上下文, _
'    并调用函数ImmAssociateContext将新创建的输入上下文与指定的窗口关联。当不用这个新创建的上下文时, _
'    调用ImmDestroyContext来释放内存。调用函数ImmLockIMC能够得到一个指定的输入上下文的指针, _
'    通过这个指针可以访问输入上下文的数据。访问结束后调用函数ImmUnlockIMC,ImmUnlockIMC减少计算锁数量, _
'    直到释放句柄。
'
'    如果没有必要我们不必查询上下文资料,直接利用 WM_IME_(Start)COMPOSITION 消息进行汉字输入
'
'    有了上面两句代码,我们的控件就可以接受输入法了,但没有对输入数据进行整理是不能够得到汉字的


微软拼音输入2010在先前版本的基础之上,对性能和准确度进行了重大改进,并增加了许多更加符合用户使用习惯的功能。软件词库更加丰富并,支持自动更新词典和共享的扩展词典平台,可定制的在线搜索,同时提供了新体验和简捷两种主流的输入风格,满足不同的用户打字习惯。此次发布的新版本对于习惯以前微软拼音输入的用户或习惯主流拼音输入的用户来说都可以很好的适应。推荐喜欢的用户进行更新。   微软拼音输入2010正式版主要特色: 1、快-反应快捷敏锐 - 启动迅速、反应敏捷、随打随有。 - 微软拼音输入 2010 进行了深入的性能优化,无论是启动速度还是打字速度都有长足的提高,反应快捷敏锐;使您一步领先,步步领先。 2、准-打字准确流畅 - 基于海量知识库的智能拼音转换,让您打起字来行云流水,准确畅快。 - 快速智能的学习您输入的新词,一词汇统统一学就会。 - 收录最新热门网络词汇,好词、热词顺手拈来,中文输入更自信。 3、妙-打字随心所欲 - 提供两种输入风格,满足不同输入习惯 - 微软拼音输入 2010 提供了“新体验”和“简捷”两种输入风格。“新体验风格”秉承微软拼音传统设计,采用嵌入式输入界面和自动拼音转换;“简捷风格”则为微软拼音输入 2010全新设计,采用光标跟随输入界面和手动拼音转换。无论您习惯于哪种打字方式,您都可以在微软拼音输入 2010中找到适合您的输入风格。 4、多-词汇多不胜数 - 支持丰富的专业词典,您可以制成录入专业文献的便利工具,助您在工作中提高效率,势如破竹! - 支持自动的词典更新,持续为您提供最新最热门的词汇。 - 扩展词典共享,任何个人或供应商都可以创建扩展词典与大家分享。 5、巧-巧在即打即搜 - 支持可定制的在线搜索查询,随时搜索关键词。 - 微软拼音输入 2010 提供了搜索插件功能,您可以随时对正在输入的内容进行搜索。您还可以根据需要定制搜索插件,以满足特定的业务需求。

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧