C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

IMEの入力モード取得


(過去ログ 1 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■225 / inTopicNo.1)  IMEの入力モード取得
  
□投稿者/ きいちろう 二等兵(1回)-(2005/03/16(Wed) 17:01:40)
きいちろう さんの Web サイト

分類:[VC++] 


分類:[VC++] 

きいちろうと申します。
GDNよりじゃんぬねっとさんのページにたどりつきました。
WindowsXP/IME2002環境でIMEの入力モードを取得する方法に関してお願いします。


【実施したいこと】
IMEの入力モード状態表示(「全角ひらがな」、「半角カタカナ」等)を行うプログラムを作成したいと考えています。


【試した事】
WH_CALLWNDPROCでグローバルフックをかけます(無理矢理ですね..)。
フックプロシージャ内でWM_NOTIFY/WM_KEYDOWNを受け取るたびにImmGetConversionStatusを実行してlpfdwConversionを取得し、表示用APに通知します。

【現象】
メモ帳などのプログラムでは、lpfdwConversionに入力モードに従った値が返されるのに対し、IE6ではlpfdwConversionは常に0x19が返されます。

TextServiceFrameworkも調べてみたのですが、入力モードを取得する方法については手がかりを見つけられませんでした。
IE6等でも正しい入力モードを取得する方法がありましたら教えていただけますようお願いいたします。


0
引用返信 編集キー/
■226 / inTopicNo.2)  Re[1]: IMEの入力モード取得
□投稿者/ Kara虎 二等兵(1回)-(2005/03/16(Wed) 19:10:23)

分類:[VC++] 

Kara虎と申します

> フックプロシージャ内でWM_NOTIFY/WM_KEYDOWNを受け取るたびにImmGetConversionStatusを実行してlpfdwConversionを取得し、表示用APに通知します。

SPY++で、IE6で「半角/全角」キーを押したときの動きを見てみたら
<00201> 002F08EC P WM_KEYUP nVirtKey:00F3 cRepeat:1 ScanCode:29 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<00202> 002F08EC S ..............................................WM_IME_NOTIFY dwCommand:00000008 dwData:00000000
<00203> 002F08EC R ..............................................WM_IME_NOTIFY
となっていました

通用するのかはわかりませんがWM_KEYUPの時にもImmGetConversionStatusを実行してみてはどうでしょうか?
WM_IME_NOTIFYで実行の方が良いかもしれません(あんまり自信はないです)


0
引用返信 編集キー/
■227 / inTopicNo.3)  Re[2]: IMEの入力モード取得
□投稿者/ きいちろう 二等兵(2回)-(2005/03/16(Wed) 19:33:07)
きいちろう さんの Web サイト

分類:[VC++] 

> 通用するのかはわかりませんがWM_KEYUPの時にもImmGetConversionStatusを実行してみてはどうでしょうか?

WM_KEYUPを拾うよう試してみましたが、変換モードの値はやはり0x00000019が返ってきてしまいました。。
出来ればKEY_DOWNもKEY_UPも拾いたくないと思ってるんです(システムフックだから性能が大丈夫かなあと思いまして)。

それと、前の説明に書きわすれてしまいましたが、IE6でもIMEのオープン/クローズは検知できています。WM_NOTIFYを受けたときにImmGetOpenStatusを実行すると、IMEのオープン状態は正しい値が返ってきます。

0
引用返信 編集キー/
■228 / inTopicNo.4)  Re[3]: IMEの入力モード取得
□投稿者/ Kara虎 二等兵(2回)-(2005/03/16(Wed) 21:43:16)

分類:[VC++] 

> 変換モードの値はやはり0x00000019が返ってきてしまいました。。
入力モード(lpfdwConversion)の間違いですよね?
変換モード(lpfdwSentence)の値がほしいんでしたっけ?

「IME Watcher」というソフトではIE6上の入力モード状態を取得できているようでした
http://homepage3.nifty.com/takubon_world/software/IMEWatcher/

状況を再現できる最小のコードを提示してもらえたら、こっちでも確認してみますよ(解決には至らない可能性が高いですが(汗))


0
引用返信 編集キー/
■229 / inTopicNo.5)  Re[4]: IMEの入力モード取得
□投稿者/ きいちろう 二等兵(3回)-(2005/03/17(Thu) 09:37:12)
きいちろう さんの Web サイト

分類:[VC++] 

> 入力モード(lpfdwConversion)の間違いですよね?
入力モード(ConversionMode)の間違いです。すみません。

> 「IME Watcher」というソフトではIE6上の入力モード状態を取得できているようでした
こちらでも試してみましたが、IE6上ではIME Watcherもモード切替を検知しませんでした。(Googleの検索フィールドでIMEをオンにした後、[無変換]キーを押してもモード表示が切り替わらない/メモ帳では切り替わる)。

> 状況を再現できる最小のコードを提示してもらえたら、こっちでも確認してみますよ(解決には至らない可能性が高いですが(汗))
フックのDLLと表示のAPで込み入ってるので、しばらく中身を整理してからこちらにアップさせていただきたいと思います。

色々アドバイスいただき本当にありがとうございます(周囲に聞いても分かる人がいないので..)。

0
引用返信 編集キー/
■230 / inTopicNo.6)  Re[5]: IMEの入力モード取得
□投稿者/ kara虎 二等兵(3回)-(2005/03/17(Thu) 10:51:53)

分類:[VC++] 

> こちらでも試してみましたが、IE6上ではIME Watcherもモード切替を検知しませんでした。(Googleの検索フィールドでIMEをオンにした後、[無変換]キーを押してもモード表示が切り替わらない/メモ帳では切り替わる)。
あ、ホントだ
ON、OFF出来るかを見てました
すみません

こういった、それなりに有名なソフトでも取得できていないということは
なにか特殊なことが起こっていると考えてよさそうですね

ちなみにFirefox1.0、Opera7.53では取得できているようでした

> フックのDLLと表示のAPで込み入ってるので、しばらく中身を整理してからこちらにアップさせていただきたいと思います。
ソースがあれば、識者の方が何かを指摘してくれるかもしれません
僕の力ではもう無理そうです(汗

> 色々アドバイスいただき本当にありがとうございます(周囲に聞いても分かる人がいないので..)。
たいしたアドバイスが出来なくてごめんなさい


0
引用返信 編集キー/
■231 / inTopicNo.7)  Re[6]: IMEの入力モード取得
□投稿者/ きいちろう 二等兵(4回)-(2005/03/17(Thu) 12:17:20)
きいちろう さんの Web サイト

分類:[VC++] 

> こういった、それなりに有名なソフトでも取得できていないということは
> なにか特殊なことが起こっていると考えてよさそうですね
そうですね。根が深いんだなと思いました。
でも、他の方のソフトでも起こるということは私の単純バグの可能性は低いですね(いい訳の根拠になります..)。
私の開発環境固有の現象という可能性も低そう。

> たいしたアドバイスが出来なくてごめんなさい
とんでもないです。色々分かって助かりました。
どうもありがとうございます。


0
引用返信 編集キー/
■233 / inTopicNo.8)  Re[7]: IMEの入力モード取得
□投稿者/ kara虎 二等兵(4回)-(2005/03/18(Fri) 10:19:25)

分類:[VC++] 

似たような事例で悩んでいた人はいないのかなぁと思い
探してみたのですが、ほとんど見つかりませんでした

唯一見つけたのが以下です
http://search.acty-net.ne.jp/mfc_search/archive/2002-1/msg00603.html
解決にはなりませんね


0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -