以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 代码控制输入法的全角半角状态  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=79760)

--  作者:lsy
--  发布时间:2016/1/8 14:29:00
--  [求助] 代码控制输入法的全角半角状态
输入法老是自动转成全角,想用代码控制转换全角半角的状态。
--  作者:大红袍
--  发布时间:2016/1/8 14:50:00
--  

mark 输入法半角转换

 

全局代码

 

<DllImport("imm32.dll")> _
Public Function ImmGetContext(hWnd As IntPtr) As IntPtr
End Function

<DllImport("imm32.dll")> _
Public Function ImmGetOpenStatus(hIMC As IntPtr) As Boolean
End Function

<DllImport("imm32.dll")> _
Public Function ImmGetConversionStatus(hIMC As IntPtr, ByRef conversion As Integer, ByRef sentence As Integer) As Boolean
End Function

<DllImport("imm32.dll")> _
Public Function ImmReleaseContext(hWnd As IntPtr, hIMC As IntPtr) As Boolean
End Function

<DllImport("imm32.dll")> _
Public Function ImmSetConversionStatus(hIMC As IntPtr, conversion As Integer, sentence As Integer) As Boolean
End Function

Const IME_CMODE_FULLSHAPE As Integer = &H8

Public Sub SetHalfShape(AHandle As IntPtr)
 Dim vIme As IntPtr = ImmGetContext(AHandle)
 If ImmGetOpenStatus(vIme) Then
  \' 输入法是打开的
  Dim vMode As Integer = 0, vSentence As Integer = 0
  If ImmGetConversionStatus(vIme, vMode, vSentence) Then
   \' 获取输入法状态
   If (vMode And IME_CMODE_FULLSHAPE) > 0 Then
    \' 是全角
    vMode = vMode And (Not IME_CMODE_FULLSHAPE)
    ImmSetConversionStatus(vIme, vMode, vSentence)
   End If
  End If
 End If
 ImmReleaseContext(AHandle, vIme)
End Sub

 

enter事件,或者textchanged事件

 

Dim txt = e.Form.Controls("TextBox1").basecontrol
SetHalfShape(txt.handle)


--  作者:lsy
--  发布时间:2016/1/8 14:54:00
--  
谢谢。
难度不小啊。