- - PR -
imm32.dllで入力モードが切り替えできない(変換モードはできる)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-03-15 11:56
IMEの入力モードと変換モードを切り替えたいのです。
サンプルコードを改修して、変換モードだけは切り替わるようになったのですが入力モードが変更できません。 2つのボタンで半角カナ無変換モードと、全角ひらがな自動変換モードを切り替えようとしています。 どなたか対応法をご教授下さい。宜しくお願いします。 Public Class Form1 Declare Function GetActiveWindow Lib "user32" () As Integer Public Const IME_CMODE_NATIVE As Integer = &H1 Public Const IME_CMODE_CHINESE As Integer = IME_CMODE_NATIVE Public Const IME_CMODE_HANGEUL As Integer = IME_CMODE_NATIVE Public Const IME_CMODE_HANGUL As Integer = IME_CMODE_NATIVE Public Enum IME_CMODE_ENUM As Integer IME_CMODE_ALPHANUMERIC = &H0 IME_CMODE_JAPANESE = IME_CMODE_NATIVE IME_CMODE_KATAKANA = &H2 IME_CMODE_LANGUAGE = &H3 IME_CMODE_FULLSHAPE = &H8 IME_CMODE_ROMAN = &H10 IME_CMODE_CHARCODE = &H20 IME_CMODE_HANJACONVERT = &H40 IME_CMODE_SOFTKBD = &H80 IME_CMODE_NOCONVERSION = &H100 IME_CMODE_EUDC = &H200 IME_CMODE_SYMBOL = &H400 IME_CMODE_FIXED = &H800 End Enum Public Enum IME_SMODE_ENUM As Integer IME_SMODE_NONE = &H0 IME_SMODE_PLAURALCLAUSE = &H1 IME_SMODE_SINGLECONVERT = &H2 IME_SMODE_AUTOMATIC = &H4 IME_SMODE_PHRASEPREDICT = &H8 IME_SMODE_CONVERSATION = &H10 End Enum Public Declare Function ImmGetDefaultIMEWnd Lib "Imm32.dll" (ByVal hwnd As Integer) As Integer Public Declare Function ImmGetContext Lib "Imm32.dll" (ByVal hwnd As Integer) As Integer Public Declare Function ImmReleaseContext Lib "Imm32.dll" (ByVal hwnd As Integer, ByVal hIMC As Integer) As Integer Public Declare Function ImmSetConversionStatus Lib "Imm32.dll" (ByVal hIMC As Integer, ByVal fdwConversion As IME_CMODE_ENUM, ByVal fdwSentence As IME_SMODE_ENUM) As Integer Public Declare Function ImmGetConversionStatus Lib "Imm32.dll" (ByVal hIMC As Integer, ByVal lpfdwConversion As IME_CMODE_ENUM, ByVal lpfdwSentence As IME_SMODE_ENUM) As Integer Public Function SetIMEConversionStatus(ByVal hwnd As Integer, _ ByVal enmConversion As IME_CMODE_ENUM, _ ByVal enmSentence As IME_SMODE_ENUM) As Integer Dim hwndIME As Integer Dim hIMC As Integer hwndIME = ImmGetDefaultIMEWnd(hwnd) If hwndIME <> 0 Then hIMC = ImmGetContext(hwndIME) If hIMC <> 0 Then SetIMEConversionStatus = ImmSetConversionStatus(hIMC, enmConversion, enmSentence) ImmReleaseContext(hwndIME, hIMC) End If End If End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click REM 半角カナ無変換入力 SetIMEConversionStatus(GetActiveWindow, IME_CMODE_ENUM.IME_CMODE_KATAKANA, IME_SMODE_ENUM.IME_SMODE_NONE) TextBox1.Focus() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click REM 全角ひらがな自動変換入力 SetIMEConversionStatus(GetActiveWindow, IME_CMODE_ENUM.IME_CMODE_FULLSHAPE Or _ IME_CMODE_ENUM.IME_CMODE_JAPANESE Or IME_CMODE_ENUM.IME_CMODE_ROMAN, IME_SMODE_ENUM.IME_SMODE_AUTOMATIC) TextBox1.Focus() End Sub End Class |
|
投稿日時: 2007-03-16 09:43
自宅の環境で同じソースで試したところ不可解な動作をしました。
職場の環境はwindows xp professional sp2で、Visual Basic 2005、自宅環境はwindows xp home sp2で、Visual Basic Express editionです。 自宅の方だと今度は入力モードが切り替わるのに変換モードが切り替わらないという現象が出ました。 環境によって動作が一定しないとなると業務アプリで使用することが困難になります。現状では、ImeModeでの入力モード切替だけで、変換モードの切り替えはネグるしかないのかなという状態です。 |
1