DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でIMEの状態を取得する方法

環境/言語:[Windows2000、C#、.NET2003]
分類:[.NET]

お世話になります。

環境:C#(2003)、Windows2000、IME2000
現在、IMEの変換モードを取得するプログラムを作成しています。
IMM32 APIの「ImmGetConversionStatus」を使用し取得できる。。
ところまでは調査したのですが、実際のコーディング方法が不明です。

ヘルプ(MSDN)を見ますと、パラメータへ
「入力モード値の組み合わせを受け取る 32 ビット変数へのポインタを指定します。」
「変換モードの値を受け取る 32 ビット変数へのポインタを指定します。」
を指定と。。記載されているのですがよくわかりません。

参考となるようなコーディング方法を教えてください。
宜しくお願いします。
■No11893に返信(KOROさんの記事)
> ヘルプ(MSDN)を見ますと、パラメータへ
> 「入力モード値の組み合わせを受け取る 32 ビット変数へのポインタを指定します。」
> 「変換モードの値を受け取る 32 ビット変数へのポインタを指定します。」
> を指定と。。記載されているのですがよくわかりません。
『詳細については、』以降は読まないの?
■No11896に返信(るしぇさんの記事)
> ■No11893に返信(KOROさんの記事)
>>ヘルプ(MSDN)を見ますと、パラメータへ
>>「入力モード値の組み合わせを受け取る 32 ビット変数へのポインタを指定します。」
>>「変換モードの値を受け取る 32 ビット変数へのポインタを指定します。」
>>を指定と。。記載されているのですがよくわかりません。
> 『詳細については、』以降は読まないの?

るしぇさん、ご返信ありがとうございます。
参照してみたのですが、よく理解できません。
「ImmGetConversionStatus」ではなく、「ImmSetConversionStatus」では
変換モードを変えることができています。

「ImmGetConversionStatus」は32 ビット変数へのポインタとありますので
long?uint?などでパラメータ値を宣言し指定しているのですが、「ImmGetConversionStatus」実行後の取得値が「0」になっています。
モードを切り替えても変わらず「0」しか取得できないため、コーディングが悪い
のでは?と考えています。
unsafeでポインタ変数をパラメータとして渡す必要があるのでしょうか?。。
out?ref?。。マーシャル?難しいです。
■No11898に返信(KOROさんの記事)
> ■No11896に返信(るしぇさんの記事)
>>■No11893に返信(KOROさんの記事)
> >>ヘルプ(MSDN)を見ますと、パラメータへ
> >>「入力モード値の組み合わせを受け取る 32 ビット変数へのポインタを指定します。」
> >>「変換モードの値を受け取る 32 ビット変数へのポインタを指定します。」
> >>を指定と。。記載されているのですがよくわかりません。
>>『詳細については、』以降は読まないの?
>
> るしぇさん、ご返信ありがとうございます。
> 参照してみたのですが、よく理解できません。
> 「ImmGetConversionStatus」ではなく、「ImmSetConversionStatus」では
> 変換モードを変えることができています。
>
> 「ImmGetConversionStatus」は32 ビット変数へのポインタとありますので
> long?uint?などでパラメータ値を宣言し指定しているのですが、「ImmGetConversionStatus」実行後の取得値が「0」になっています。
> モードを切り替えても変わらず「0」しか取得できないため、コーディングが悪い
> のでは?と考えています。
> unsafeでポインタ変数をパラメータとして渡す必要があるのでしょうか?。。
> out?ref?。。マーシャル?難しいです。
>

何とか解決できました。お騒がせしました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板