- PR -

IMEを無効にするには

1
投稿者投稿内容
チェイス
常連さん
会議室デビュー日: 2005/02/23
投稿数: 27
投稿日時: 2005-10-06 15:51
お世話になります。

開発環境 VisualBasic6.0(SP6)、Windows2000(SP4)

上記の条件で開発しておりますが、現行バージョンまではIMEによるカナ入力がされたくなかったのでAPI関数のImmDisableIMEによりIMEを無効にしておりました。
今回仕様変更により、とあるフォームのテキストボックスでのみカナ入力させる必要性が発生し、調べたところImmDisableIMEはVBより生成したアプリが終了するまでIME無効状態の解除ができないことがわかりました。
そこで、他の手段にてIMEの無効・有効を切替えたいのですが調べたところAPIのImmAssociateContextを用いればできるのではと思ったのですが、この関数への引数の意味がよく理解できません。
どのような引数の渡し方をすればうまく切り替わるでしょうか?
ご教授よろしくお願いします。
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-10-06 16:42
IMEのOn/OFF制御は、下記APIの組み合わせで行ったことがあります。
コード:
ImmGetContext : コンテキスト取得
ImmGetOpenStatus : 状態取得
ImmSetOpenStatus : 状態設定
ImmReleaseContext : コンテキスト解放



参考になれば。
#ImmDisableIME,ImmAssociateContext は使ったこと無いのでわかりません。。
チェイス
常連さん
会議室デビュー日: 2005/02/23
投稿数: 27
投稿日時: 2005-10-06 17:13
葉瀬崎浩樹さん早速のご回答ありがとうございます。
早速試してみましたが、今回教えていただきました方法及びImmAssociateContextにて
IMEの制御を行うとOffになるだけで、キーボードの操作でOnになるんですね。。。
無知でした。
IMEをOffでは無くて使用不可にできて、必要な時には使用可にするという方法は
何か無いでしょうか。
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2005-10-06 17:27
VisualBasicはよくわからんけど。

http://hp.vector.co.jp/authors/VA016117/noime.html
↑ここらへんとか?
(「ImmAssociateContext」で検索)
チェイス
常連さん
会議室デビュー日: 2005/02/23
投稿数: 27
投稿日時: 2005-10-06 17:56
冬寂さん、ご回答ありがとうございます。
一度調べてImmAssociateContextはダメだと思い込んでたのですが、
再度チャレンジしてみると引数の取得がまずかったみたいで、うまく制御することができました。
以下が参考となります。

@標準モジュールで宣言
Declare Function ImmAssociateContext Lib "Imm32.dll" (ByVal hWnd As Long, ByVal hIMC As Long) As Long
Declare Function GetFocus Lib "user32" () As Long

@使用したいモジュール内で
Dim W_hWnd As Long
Dim lngRet As Long

W_hWnd = GetFocus
lngRet = ImmAssociateContext(W_hWnd, 0)
IMEが無効となります。

戻す場合は
Call ImmAssociateContext(W_hWnd, lngRet)
で戻りました。

ありがとうございました。
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-10-06 17:59
失礼しました。
IMEのON/OFF制御ではなく、On/Disable制御を行いたいのですね。

コード:

txtHoge.IMEMode = vbIMEDisable
txtHoge.IMEMode = vbIMEModeOn



テキストボックスのIME制御は、上記コードでも可能です。
こういう方法ではダメなのでしょうか?

#おっと解決している。おめでとうございます。

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-10-06 18:00 ]
1

スキルアップ/キャリアアップ(JOB@IT)