IMEが有効になっているかを調査するには?

解決


HANA  2004-07-27 10:47:56  No: 115082  IP: [192.*.*.*]

初めて質問させていただきます。
IMEを使用して文字列の変換を行うツールを作っていますが、
フロントエンドにIME以外が有効になっているPCで実行すると
アプリケーションエラーになってしまいます。
エラーを起こす前にIMEの状態を取得して他の日本語入力システムが
有効になっている場合はメッセージ等の表示を行いたいと思っています。
IMEの状態取得にはIMEStatus等があるようですが、これらはIMEが有効に
なっている前提なのでしょうか?例えばATOKが有効になっているという
状態は取得できるのでしょうか?
手元にATOK等入れられる環境がないもので、質問させていただきました。
よろしくお願い致します。

編集 削除
魔界の仮面弁士  2004-07-27 11:47:20  No: 115083  IP: [192.*.*.*]

> フロントエンドにIME以外が有効になっているPCで実行すると
> アプリケーションエラーになってしまいます。
ここでいうIMEとは、Microsoftの「MS-IME」という製品名の事でしょうか?

> 例えばATOKが有効になっているという状態は取得できるのでしょうか?
「有効」という言葉の範囲にもよりますが(インストールの有無、規定のIMEになっているかの確認、ATOKの入力モードの判定など)、可能だと思います。

こちらも ATOKが無いので、試していませんが、昔使っていたソースでは、

hKL = GetKeyboardLayout(App.ThreadID)
hWnd = ImmGetDefaultIMEWnd(GetActiveWindow())
Description = String(256, 0)
nDesc = ImmGetDescription(hKL, Description, 255)
Description = StrConv(MidB(StrConv(Description, vbFromUnicode), 1, nDesc), vbUnicode)
If Description Like "*ATOK1#*" Then
     Debug.Print "有効"
End If

のような処理が書かれていたので、これらのAPIを使えば判定できるかも。

もし、より細かい状態を知りたい場合は、Imm系 APIだけではなく、
各IME固有の命令(ATOKなら、atoklib.dll の ATOK APIとか)を
呼び出す必要があるかも知れません。

編集 削除
HANA  2004-07-27 13:13:58  No: 115084  IP: [192.*.*.*]

>魔界の仮面弁士様。
早速のアドバイス、どうもありがとうございます。
ATOK等を持っていないから確認できないと思い込んでいましたが、
Windowsの地域設定でMS-IMEをデフォルトから外すことができるんですね。
そんなに、詳細な情報を必要とはしていなかったので、当初の問題は解決いたしました。
でも、アドバイスのようにすると文字列でも取得できるんですね。
とても勉強になりました。どうもありがとうございました。

編集 削除