dポイントプレゼントキャンペーン実施中!

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

Vista
エクセル2007 VBA

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

補足日時:2010/06/24 16:55
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/06/24 17:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!