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)