質問 imm32 を使ったプログラムの互換性について

  • 2006年9月27日 10:12
     
     

    XP で動いていた imm32 を使用したプログラムが Vista では正常に動作しなくなってこまっています。MSのサンプルプログラムである MultiUI でも同様の動作が確認できます。Vista で imm32 の仕様変更があったか、ご存知の方がいらっしゃいましたら教えてください。

    問題の再現手順は下記のようになります。

    1. MutliUI は下記の URL からダウンロードできます(132MB)。コンパイルして、実行します。
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample98/html/vcsmpmultiui.asp

    2. MultiUI は6つの区画があり、それぞれで IME 経由で文字が入力できます。左中央と右中央でIMEをオンにします。

    3. 左中央をマウスでクリックして、「あい」と入力し、スペースキーを2回押して候補ウィンドウを表示させます。

    4. 候補ウィンドウを表示させたまま、右中央をマウスでクリックして、「いえ」と入力し、スペースキーを2回押して候補ウィンドウを表示させます。

    5. 候補ウィンドウを表示したまま、左中央をマウスでクリックすると、候補ウィンドウは正しく表示されますが、未確定文字列が表示されません。

    再描画に何か問題があるような気がするのですが、実際は何かの処理が足りないための問題なのでしょうか?

すべての返信

  • 2006年9月28日 3:24
     
     

    詳しくないのですが(^^;;

    http://d.hatena.ne.jp/NyaRuRu/20060919

    Nyaruruさんも書かれていますが、VistaからはImm系ではなくTFSがメインになるのでそのあたりでしょう。

     

  • 2006年9月28日 3:41
     
     

    TFS (Team Foundation Server) じゃなくて TSF (Text Services Framework) ですね。
    あ~、 ややこしい

    WPF では (今のところ?) TSF しかなくて、 四苦八苦してたりします 

  • 2006年9月28日 7:07
     
     
     ichiroh さんからの引用

    XP で動いていた imm32 を使用したプログラムが Vista では正常に動作しなくなってこまっています。MSのサンプルプログラムである MultiUI でも同様の動作が確認できます。Vista で imm32 の仕様変更があったか、ご存知の方がいらっしゃいましたら教えてください。

    WIndows Vista のベータテストに参加されていて,connect.microsoft.com サイトにアカウントをお持ちでしたら,2006年9月10日付けで公開されている「Windows Vista RC1 評価ガイド (WindowsVistaRC1JapaneseEvalGuide.doc)」で詳しく解説されています.
    『2.1.2. IME とアプリケーションの互換性』をご覧下さい.

    また,Feedback ID 187760 と 187770 で TSF 関係のフィードバックを上げていますので,よろしければご覧下さい.

    評価ガイドを見る限り,RTM までにはエミュレーション・レイヤーを完成させる予定とのことですが,RC 1 でも不完全な点が残っており,かなり怪しい状況に見えます.
    また,Windows Vista の新しい TSF は従来の IMM API と同等以上の機能を持っていることが SDK のヘッダファイルからは読み取れるのですが,残念ながら新機能についてのドキュメントが一切存在しないため,予想通りの挙動を示してくれるかは未知数です.(時間が取れれば評価してみたいのですが,こちらもまだ手つかずです)

  • 2006年9月28日 12:20
     
     

    返信ありがとうございました。

    connect.microsoft.comにはアクセスできるようなのですが、Vistaのベータテストには参加していないので、評価ガイドなどは見つけることができませんでした。

    以前にTSF(IMM)の問題をMSDNで修正してほしいと頼んだのですが、「次のリリースまで修正しない」と断れたので今回は早めに対応しようと思ったのですが。。。

    SDKのヘッダファイルはまだ見ていないので、確認してみます。

  • 2006年10月11日 13:33
     
     

    よく知らなかったのですが、Vista は Avalon Input System というものを使っているようです。

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnlong/html/avaloninput.asp

  • 2006年10月12日 4:05
     
     

    "Avalon" Input System は、 WPF (コードネーム Avalon) が、 キーボード・マウス・スタイラスといった入力機器からのイベントを扱う仕組みのことです。 Vista 全体で使っているわけではありません。 また、 Windows XP などでも、 .NET Framework 3.0 と WPF のアプリケーションを入れれば、 使われます。

    最新のドキュメントは、 たぶん次のものだと思います。
    Microsoft Windows SDK > .NET Framework 3.0 Development > Windows Presentation Foundation > WPF Fundamentals > Input and Commands > Overviews > Input Overview

  • 2006年10月14日 2:14
     
     
    ご指摘ありがとうございます。
    実行環境に依存したくないので、あまり新しい機能を使わない方が良さそうですね。imm32 の互換性に問題がなければいいのですが、ビルド5744でもまだ直ってはいないので、どうしようか悩んでいるところです。
  • 2006年10月20日 3:22
     
     

    日本向けの Vista 評価ガイドがアップデートされ,10月17日付けで Connect サイトに再公開されていますね.

    各 IMM32 API / Message ごとの互換状況・マイグレーション方法が解説されています.
    ご参考までに.

  • 2006年10月20日 6:12
     
     

    その評価ガイド、読んでみたいですね。Connect サイトのどこで見られるのかよくわからないので困っています。

    下記のURLにも評価ガイドがあるのですが、内容は違うんですねよ?

    http://www.microsoft.com/japan/technet/windowsvista/default.mspx

  • 2006年10月20日 8:05
     
     

    いろいろ動作確認してわかったことは、複数の入力コンテキストを使用しようとしても、1つの入力コンテキストを共有しているみたいです。マルチウィンドウの場合であっても一箇所で IM をオンにすると他のウィンドウでもオンになります。この辺りにこの問題が発生した原因がありそうです。

    また日本語入力中に半角/全角キーで半角入力にすると、XP は IM がオフになっていたのですが、Vistaでは IM がオンのままで半角が入力され、文字を確定すると IM がオフになるようです。

    ImmGetDescription() を利用して IME の名前を取得することもできないので、Vista の MS-IME は言語環境に依存しない IM という位置づけになったのかもしれません。

  • 2006年10月20日 12:43
     
     
     ichiroh さんからの引用

    その評価ガイド、読んでみたいですね。Connect サイトのどこで見られるのかよくわからないので困っています。

    下記のURLにも評価ガイドがあるのですが、内容は違うんですねよ?

    http://www.microsoft.com/japan/technet/windowsvista/default.mspx

    はい.
    Connect サイトの Windows Vista, Longhorn Server and IE 7 Japanese Beta Program で公開されている評価ガイドは,開発者や企業担当者向けの資料で,上の URL でダウンロードできるものとは別物です.

    ベータテスト参加者以外にどこかで配布されているかどうかは,私には分かりません.

  • 2006年11月9日 14:10
     
     
     NyaRuRu さんからの引用

    また,Windows Vista の新しい TSF は従来の IMM API と同等以上の機能を持っていることが SDK のヘッダファイルからは読み取れるのですが,残念ながら新機能についてのドキュメントが一切存在しないため,予想通りの挙動を示してくれるかは未知数です.(時間が取れれば評価してみたいのですが,こちらもまだ手つかずです)

    いつの間にかですが、Windows SDK のヘルプに TSF の新 API についての説明が追加されています。
    先日リリースされた Windows SDK 6.0 RTM 版にも同梱されていることを確認しました。

    ご参考までに。

    http://msdn2.microsoft.com/en-us/library/ms629038.aspx

  • 2007年2月22日 6:08
     
     
     NyaRuRu さんからの引用

    ベータテスト参加者以外にどこかで配布されているかどうかは,私には分かりません.

    こちらの投稿で気付きましたが,「MSDN Home > Windows Vista デベロッパー センター > 開発者向け互換性情報」で公開されている『アプリケーション互換性情報パック』内に,上記 PPT が含まれています.ご参考までに.

  • 2007年3月7日 13:47
     
     
     ichiroh さんからの引用

    XP で動いていた imm32 を使用したプログラムが Vista では正常に動作しなくなってこまっています。MSのサンプルプログラムである MultiUI でも同様の動作が確認できます。Vista で imm32 の仕様変更があったか、ご存知の方がいらっしゃいましたら教えてください。

    今更ですが……

    本件,当方でも再現しました.ただ,Vista での imm32 というよりは,Vista で『詳細なテキスト サービスのサポートをプログラムのすべてに拡張する』( あるいは CUAS; Cicero Unaware Application Support とも呼ばれる) がデフォルトでオンになることの影響のようでした.

    CUAS は TSF (Text Services Framework) ベースの TIP (Text Input Processor) による文字入力を,TSF 非対応のアプリケーションにも拡張する仕組みで,Windows XP SP1 で初めて導入されました.それ以降にリリースされた OS には標準で搭載されています.

    そして CUAS を有効にした Windows XP SP2 環境で TSF ベースの TIP (IME 2007) を使用して試してみたところ,仰るような現象がやはり再現されました.つまり,

    1. XP SP1 時代の CUAS で既に発生していた非互換性である
    2. Vista で CUAS が強制 On になることで,今回のタイミングで発覚した

    ということになるかと思います.ざっと見た範囲内では,この CUAS の挙動が正常かどうかという点について,Microsoft に問い合わせてみるのが確実かと思います.

  • 2008年8月25日 8:38
     
     
     NyaRuRu さんからの引用

    本件,当方でも再現しました.ただ,Vista での imm32 というよりは,Vista で『詳細なテキスト サービスのサポートをプログラムのすべてに拡張する』( あるいは CUAS; Cicero Unaware Application Support とも呼ばれる) がデフォルトでオンになることの影響のようでした.

    CUAS は TSF (Text Services Framework) ベースの TIP (Text Input Processor) による文字入力を,TSF 非対応のアプリケーションにも拡張する仕組みで,Windows XP SP1 で初めて導入されました.それ以降にリリースされた OS には標準で搭載されています.

    そして CUAS を有効にした Windows XP SP2 環境で TSF ベースの TIP (IME 2007) を使用して試してみたところ,仰るような現象がやはり再現されました.つまり,

    1. XP SP1 時代の CUAS で既に発生していた非互換性である
    2. Vista で CUAS が強制 On になることで,今回のタイミングで発覚した

    ということになるかと思います.ざっと見た範囲内では,この CUAS の挙動が正常かどうかという点について,Microsoft に問い合わせてみるのが確実かと思います.

    はじめまして。こちらでは、WindowsXPでは、キーボードフックを使ってキー押しを見張り、キーに応じてIMMSetCompositionStringで変換文字をセットしています。Windows Vistaでは、CUASが不可避になったため、imm32互換性情報を読んだところ一文字しか表示できないとのこと。なので、現存文字列にセットしたい文字を連結してセットしなおしています。
    そこで質問1:これからもこの互換性は保持されるのでしょうか?とMicrosoftに聞きたいですがサポート契約する余裕がないもので、投稿させていただきます。

     

    TSFについてもNyaRuRuさんの情報を参考に、WinUiのTSFAPPサンプルを使ってみましたが、C++でWindowを自前で書いてあ
    り、ImmSetCompositionStringに代わるようなものが見つからず、SetTextくらいしかありません。これが結局は、入力
    用Windowに文字列を貼り付けよとメッセージを送っているだけです。これでは、背景も下線もなく、入力中の文字列なのかどうか区別がつきません。
    そこで質問2:背景や下線はAttributeのようですが、これはテキストサービスの役割とのことなんですね。ネイティブ対応は難しそうというか、複雑になるだけみたいですね?

     

    WPFにWindows Inputというのがあり、PreviewKeyDown イベントハンドラやTextCompositionManagerが
    あるようですね。
    そこで質問3:VisualStudio2008では、ImmSetCompositionStringに代わるものとして、PreviewTextInputイベントでTextCompositionをいじるのかなあと想像しているのですが、できるのかどうか不安です。

    参考:TextBoxで入力にフィルターをしたい。http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=651967&SiteID=7

    imm32で実現できてるんですが、いつまでそれが保持されるのかと不安なのです。

    いろいろ書いてすみませんが、お目にかかりましたら、お願いいたします。

  • 2008年9月17日 13:54
     
     
    どちらを主舞台にしたいのか分かりませんが、MSDNフォーラムとTechNetフォーラムの両方にあるのはレスが分散する可能性がありますので、リンクしておきます。

     

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=3886691&SiteID=7