- ベストアンサー
API関数ImmSetConversionStatus のビットセット
API関数ImmSetConversionStatus のビットセットを組み合わせて、IME2003の「直接入力」モードに 設定することは可能でしょうか?いろいろ試してみたのですが、うまくいかないので質問しました。ご存知の方がおられましたら、よろしくお願いします。 Vista エクセル2007 VBA
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
IMEのOFFを、エクセルのシートで利用するのでしょうか?フォームで利用するのでしょうか? わからなかったので、シートでのIME制御例として説明しています。 ってかシートであれば、APIを利用しないでも出来てしまいますが^^;; 一応余談として、最後に載せてます。 プログラミングとしては、以下の3工程を行ってください。 ------------------------------------ ※1.み~くんパパの仕事部屋(旧)より http://www.mitene.or.jp/~sugisita/vb6_ime.html の 「IMEのON/OFF」 を解凍 ------------------------------------ ※2.解凍した中から標準モジュール2本 ・mIMM ・mWin32API をエクセルのプロジェクトに追加 ------------------------------------ ※3.ワークシートのマクロとして以下のコードをコピペ Sheet1のマクロにこれを張ると、セルを移動するたびにIMEの状態が切り替わります。 フォームに張るのであれば、カスタマイズしてください。 Option Explicit Private Declare Function GetActiveWindow Lib "USER32" () As Long Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim hwndIME As Long Dim hIMC As Long Dim blnIME As Long Dim l_hWnd As Long l_hWnd = GetActiveWindow() ' IMEのデフォルトウィンドウの取得 hwndIME = ImmGetDefaultIMEWnd(l_hWnd) If hwndIME Then ' IMEコンテキストの取得 hIMC = ImmGetContext(hwndIME) If hIMC Then ' 現在のIMEのON/OFF状態を取得 blnIME = ImmGetOpenStatus(hIMC) ' ON/OFFを切り替える Call ImmSetOpenStatus(hIMC, Not blnIME) ' IMEコンテキストの開放 ImmReleaseContext hwndIME, hIMC End If End If End Sub --------------- ※.余談 シートのIMEの制限であれば メニューバーより → データ(D) →→ 入力規則(L) →→→ 日本語入力 で、Excel2003以下では制限を加えることも出来ます。 リボン形式のメニューからの操作手順は、こちらではわかりませんが、、、 入力規則機能は2007でもあるはずです。
お礼
サンプルを動かしてみて理解できました。IMEをOFFにすれば直接入力になるのですね!どうもありがとうございました。
補足
さっそくのご回答ありがとうございました。IME制御はフォームで利用します。その際、SendKeysで日本語を送るのですが、IME2003では「直接入力」にしないと文字化けしてしまうため、APIで制御したいとうニーズになります。なお、ウインドウハンドルとIMEコンテキストの取得は成功できていて、半角英数やひらがな入力などに制御する方法は成功しております。ちなみに、IME2007では「直接入力」がなくなっていて半角英数にすると文字化けしないことまで確認できています。したがって、フォームでIME2003をAPIで「直接入力」モードに設定したいのですが、可能でしょうか?どうぞよろしくお願いします。