• ベストアンサー

API関数ImmSetConversionStatus のビットセット

API関数ImmSetConversionStatus のビットセットを組み合わせて、IME2003の「直接入力」モードに 設定することは可能でしょうか?いろいろ試してみたのですが、うまくいかないので質問しました。ご存知の方がおられましたら、よろしくお願いします。 Vista エクセル2007 VBA

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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でもあるはずです。

neo1124
質問者

お礼

サンプルを動かしてみて理解できました。IMEをOFFにすれば直接入力になるのですね!どうもありがとうございました。

neo1124
質問者

補足

さっそくのご回答ありがとうございました。IME制御はフォームで利用します。その際、SendKeysで日本語を送るのですが、IME2003では「直接入力」にしないと文字化けしてしまうため、APIで制御したいとうニーズになります。なお、ウインドウハンドルとIMEコンテキストの取得は成功できていて、半角英数やひらがな入力などに制御する方法は成功しております。ちなみに、IME2007では「直接入力」がなくなっていて半角英数にすると文字化けしないことまで確認できています。したがって、フォームでIME2003をAPIで「直接入力」モードに設定したいのですが、可能でしょうか?どうぞよろしくお願いします。

関連するQ&A