チケット #26438

ワードパッドでのIME読み上げの不具合

登録: 2011-09-30 19:43 最終更新: 2012-04-20 22:12

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし

詳細

ワードパッドでIME読み上げの不具合が確認されました。

  • 最初の1回の変換については未変換文字・未確定文字を読みあげない
  • 2回目以降の変換については、変換候補の読みを正しく取得していない

などの現象です。2011.1.1j3 および 2011.2j の両方で起こります。

Windows XP / 7 (x86) / 7 (x64) のいずれのワードパッドでも何らかの不具合があります。

Microsoft IME だけでなく ATOK でも起こる場合がありますが、詳細は引き続き調査します。

添付ファイルリスト

添付ファイルはありません

チケットの履歴 (16 件中 3 件表示)

2011-09-30 19:43 更新者: nishimoto
  • 新しいチケット "ワードパッドでのIME読み上げの不具合" が作成されました
2011-12-08 21:56 更新者: nishimoto
  • マイルストーン(未割り当て) から 2012.1j (完了済み) に更新されました
  • コンポーネント(未割り当て) から IME に更新されました
2012-01-24 08:30 更新者: nishimoto
コメント

IME (Input Method Editor) と Text Services Framework のアクセシビリティ

  • IME 2002 の候補 UI から候補文字列を取得する方法
  • 英語
    • readcomp サンプルプログラムのTSF処理を参考に 2011.3j までの nvdajpime が実装されている。
    • 上記の ms971336 および JP418798 によれば WinEvent (MSAA) をフックする必要がある。現在の nvdajpime はキーイベントに依存して TSF をアクセスしている。

NVDA 本家の実装の関連箇所(2012年1月現在)

  • keyboardHandler.py : 低レベルキーフックを行う。internal_keyDownEvent() など。keyboardInputGesture を生成する。
  • inputCore.py : InputManagerのexecuteGesture()でキーイベントを処理する。ここでフォーカスウィンドウの確認をしてスリープモードの判定など。
  • IAccessibleHandler.py : pumpAll() が core.py からタイマーで呼び出される。WinEvent を NVDAEvent にマッピングする処理など。
  • NVDAObjects/IAccessible/init.py : "mscandui21.candidate" ROLE_SYSTEM_PUSHBUTTON "IME.IMECandidate" のキーワードが含まれている。 IME.py へのマッピング
2012-01-27 23:56 更新者: nishimoto
コメント

MSAA を使って候補UIの候補文字列を読み上げる処理を実装してみました。

まだ未確定文字列 (Composition Window) の対応はできていません。

lp:~nishimotz/nvdajp/betterInput rev 4271

以下の環境で動作を確認しています。

  • Windows XP + wordpad + Microsoft IME
  • Windows 7 (x64) + wordpad + Microsoft IME
  • Windows 7 (x64) + Microsoft Word 2010 (32bit) + Microsoft IME
  • Windows 7 (x64) + Microsoft Word 2010 (32bit) + Microsoft Office IME 2010
2012-01-29 17:14 更新者: nishimoto
コメント

Windows 7 (x64) + wordpad + Microsoft IME を対象とした未確定文字列 (Composition Window) の読み上げ処理を実装してみました。

lp:~nishimotz/nvdajp/betterInput rev 4278

ms971336 の記述にしたがって ITfTextEditSink::OnEndEdit() から RPC で Python 側の処理をトリガーしています。

メモ帳でキーエコーが重複する不具合があります。また、32ビットアプリケーションへの対応も未実装です。

2012-01-30 10:36 更新者: nishimoto
コメント

Windows 7 (x64) + Microsoft Word 2010 (x86) + Microsoft IME で未確定文字列 (Composition Window) の読み上げが動作しました。

lp:~nishimotz/nvdajp/betterInput rev 4281

以前のキーエコーの処理は無効化したのですが、スペースキーを押した直後の読み上げが詳細読み上げにならない不具合が一部の環境で起きています。また、ワードパッド x64 が起動直後にIME読み上げしない(何か入力してEnterすれば次の行から有効になる)という現象を確認しています。

他のOSでの検証はこれから行います。

2012-02-06 19:36 更新者: nishimoto
コメント

IMMとTSFの共存を考慮した実装が安定してきたので jpdev120206 スナップショットに取り入れました。

lp:~nishimotz/nvdajp/betterInput rev 4282

リリースノートと重複しますが、以下のような状況です:

・Windows XP SP3 において、 「詳細なテキストサービスをすべてのアプリケーションに拡張しない」 「詳細なテキストサービスを無効にしない」 という設定でワードパッドとMS-IMEにおける日本語入力の読み上げが欠落します。 テキストサービス完全無効化(チェック無効+チェックあり)および テキストサービス全アプリ有効化(チェックあり+チェックなし)の場合は動作します。

・変換候補の読み上げにおいて音声の最初の部分が重複して再生されることがあります。 (候補読み上げが IMM と MSAA の両方で発生する場合の処理が不完全なためです)

・ATOK 2011 についてはテキストサービス無効の場合のみ動作を確認しています。

なお、現時点で動作確認している環境は以下のとおりです:

Windows 7 sp1 x64 + Microsoft IME + ATOK 2011 環境

  • メモ帳 x64 + Microsoft IME (TSF)
  • メモ帳 x64 + ATOK (IMM)
  • ワードパッド x64 + Microsoft IME (TSF)
  • ワードパッド x64 + ATOK (IMM)
  • AsstEd x86 + Microsoft IME (TSF)
  • AsstEd x86 + ATOK (IMM)
  • Microsoft Word 2010 x86 + Microsoft IME (TSF)
  • Microsoft Word 2010 x86 + ATOK (IMM)

Windows XP sp3 x86 + Microsoft IME 環境

  • TSF完全無効(チェック無効+チェックあり):メモ帳
  • TSF完全無効(チェック無効+チェックあり):ワードパッド
  • TSF一部有効(チェックなし+チェックなし):メモ帳
  • TSF一部有効(チェックなし+チェックなし):ワードパッド
  • TSF完全有効(チェックあり+チェックなし):メモ帳
  • TSF完全有効(チェックあり+チェックなし):ワードパッド
2012-02-11 00:13 更新者: nishimoto
コメント

チケット25653に関連して、アプリケーションのスリープモードでIME読み上げを抑止するように変更しました。

  • lp:~nishimotz/nvdajp/main rev 4213
  • lp:~nishimotz/nvdajp/MiscellaneousDependencies rev 72
2012-02-14 11:43 更新者: nishimoto
コメント

jpdev120214 と ATOK 2012(テキストサービスを使用しない)にて、以下の現象を確認しました。

  • Windows 7 x64 SP1 + メモ帳(64ビット)で日本語を入力、変換してEnterを押したときに「確定読み上げ」が行われない。次の入力を始めたときに、直前に確定読み上げされるはずの文字列が遅れて読み上げられる。
2012-02-22 16:52 更新者: nishimoto
コメント

ATOK 2012 (テキストサービスを使用しない) + Windows 7 x64 SP1 + メモ帳(64ビット)で確定読み上げが欠落する問題に暫定的な対応を行いました。

lp:~nishimotz/nvdajp/betterInput rev 4284

2012-03-11 10:41 更新者: nishimoto
コメント

Windows XP + Wordpad + Microsoft IME でプリエディット(未確定文字列)読み上げと確定読み上げが行われない現象は解決していません。

詳しく調べてみたところ nvdajpime/nvdajpime.cppp で GetIMMOpenStatus() が常に FALSE を返すため、TSF の _Init() が呼ばれていないようです。

カレントウィンドウのハンドルを返すはずの GetFocus() が NULL しか返さないので IMM の状態を取得できていません。

スレッドが一致しないためかも知れません。

GetFocus関数: http://msdn.microsoft.com/ja-jp/library/cc364641.aspx

2012-03-21 22:28 更新者: nishimoto
コメント

jpdev120311 + Windows XP sp3 で「詳細なテキストサービスを無効にする」がオンの場合に、 未確定文字と変換候補の読み上げができていません。

2012-03-24 00:30 更新者: nishimoto
コメント

jpdev120323 にて Windows XP sp3 「詳細なテキストサービス無効」における不具合への対応を行いました。

2012-04-13 16:27 更新者: nishimoto
コメント

本件の副作用かどうかはわかりませんが日本語を入力してEnterで確定したときに、例えば「漢字」を「かんじ、かん、じ」のように繰り返し読み上げる現象を確認しました。

  • Windows 7 sp1 x64
  • Microsoft IME
  • メモ帳 (notepad x64)
  • NVDA 2012.1j-beta2
2012-04-18 10:56 更新者: nishimoto
コメント

日本語変換候補の読み上げが重複する不具合への対策を行い、2012.1j-beta3 に反映させました。

http://bazaar.launchpad.net/~nishimotz/nvdajp/releases_2012.1/revision/5064

対処療法ですが、MSAA および IMM から同じ候補情報が連続して通知されたときに、2回目以降のイベントを無視する処理です。

ただし、後から届いたイベントの候補文字列が同じであっても accid の情報が追加されている場合は「候補1」「候補2」などの情報のみを出力キューに追加しています。

2012-04-20 22:12 更新者: nishimoto
  • チケット完了時刻2012-04-20 22:12 に更新されました
  • 状況オープン から 完了 に更新されました

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする