|
分類:[.NET 全般]
VB.net(2008)を使用して、IMEのソフトキー画面を作っています。
実際には、VB6.0のマイグレーションしたソースが動かないので、悩んでいます。
テストツールを作成して、テキストBOXのIMEの動きを確認していますが、うまく動作してくれません。
from1に、テキストボックスを配置 Form1_Activatedにて、下記記述をして、テキストBOXをIME制御しようとしています。 結構、単純な構成です。
Dim lngImeContext As IntPtr '入力コンテキストの取得用 Dim result As Long Dim lpdw As Long Dim lpdw2 As Long Dim conv As Long
'@テキストBOXのハンドル値からコンテキストを取得 lngImeContext = ImmGetContext(TextBox1.Handle) 'AIMEのOPEN処理 result = ImmSetOpenStatus(lngImeContext, True) 'B現在のIMEの状態を取得 result = ImmGetConversionStatus(lngImeContext, lpdw, lpdw2) 'CIMEへ全角ローマ字変換の状態に設定 result = ImmSetConversionStatus(lngImeContext, 25, lpdw2)
上記と同様の記述をVB6で行った場合、Bの状態取得で、第2引数、題3引数にはIME状態の値が帰ってくるのに対して 上記の場合に、値が0のままで取得ができません。 ただし、テキストBOXは、全角モードになっている。
Cを実施すると、半角英数に変わってしまう。Cの第2引数を変更しても、モードは変わらないです。
APIの定義内容も下記に記載します。 ImmGetConversionStatusの宣言の仕方が悪いのかな?とも思いますが、何か根本的な問題とも思っています。 どなたか、ご教授いただけますよう、お願いいたします。
Public Declare Function ImmGetContext Lib "imm32.dll" _ (ByVal Handle As Int32) As Int32
Public Declare Function ImmSetOpenStatus Lib "imm32.dll" _ Alias "ImmSetOpenStatus" (ByVal himc As Int32, ByVal fOpen As Integer) As Int32
Public Declare Function ImmGetConversionStatus Lib "imm32.dll" _ (ByVal himc As Long, ByVal lpdw As Long, ByVal lpdw2 As Long) As Long Public Declare Function ImmSetConversionStatus Lib "imm32.dll" _ (ByVal himc As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
|