IMEがONの状態でNVDAを終了するとシステムが異常終了する
この問題は以下のように整理したいと思います:
1:アプリが64bitの場合(OS が 64bit の場合)
(1-A)IME操作を読み上げないという問題
(1-B)システムの動作が不安定になる可能性
2:NVDAの起動終了とIMEのON/OFFのタイミングに関する問題
現象:IMEがONの状態でNVDAを終了するとシステムが異常終了する。
回避策:NVDAを一時的に喋らせないようにするときには、NVDAを終了しないで、読み上げモードの切り替えを使うとよい。
概要を「2011.1.1jにおけるアプリの異常終了」から「IMEがONの状態でNVDAを終了するとシステムが異常終了する」に改題します。
本チケットでは今後、この問題に限って扱います。
過去のご報告と重複しますが、問題を再現する手順と詳細は以下の通りです:
IMEがONの状態でNVDAを終了すると、その後アプリケーションが異常終了する、という現象(7月28日コメント)について、さらに以下を確認しました。
(1)「問題が発生したため notepad.exe を終了・・・」について、詳細を表示すると障害発生モジュールは msctf.dll とされています。
(2)Windows XP SP3 + 2010.2j でもこの現象は発生します。
(3)Windows 7 x64 + Microsoft IME + jpdev110731 の組み合わせで、メモ帳(64bit) と Notepad++ (32bit) で確認したところ、やはり上記の手順で操作すると、NVDA 終了後にアプリに日本語入力をしようとすると、アプリ不正終了(msctf.dll の問題、またはアクセス違反)になります。
メモ帳などのアプリケーションで、IMEがONのままNVDA日本語版を終了して、アプリケーションに戻って日本語を入力しようとすると、そのアプリケーションが不正終了します。
この問題は 2011.2j でも解決できていません。NVDA の読み上げを一時的に止めたい場合は、NVDA を終了せず、NVDA + S による読み上げモード切替でご対応ください。
NVDA + S を押すごとに「読み上げモード オフ」「読み上げモード ビープ」「読み上げモード トーク」に順番に切り替わります。
下記のコミットで改善された可能性があります。
lp:~nishimotz/nvdajp/betterInput 4211 および 4213
注釈:TSFに関するSinkの解除処理を TLS::InternalDestroyTLS() に追加。アプリ側のスレッドで実行されるようになった。
dllmain を修正してスレッドのデタッチのときにTLSのDestroyが呼ばれるようにしました。
lp:~nishimotz/nvdajp/betterInput 4214
NVDA終了のOKボタンを押した直後にFirefoxにフォーカスが戻って、そこでSinkを登録してしまう問題に対応するために、 フォーカス移動イベントでSinkの登録をしない実装に変えてみました。
いまのところ不具合が発生していない x86 アプリは Skype, Firefox, Notepad++ です。
lp:~nishimotz/nvdajp/betterInput 4233
不具合が見つかったので再検討します。
lp:~nishimotz/nvdajp/betterInput 4222 から、一度候補選択をして確定をすると、それ以降の未変換文字を読みあげなくなる。
同じく 4232,4233 から、変換キーを押して表示される候補ウィンドウの中の漢字候補をスペースキーで選択するときに途中から読み上げなくなる。
以下のアプリにおける改善を確認しました。
x86 アプリ:Microsoft Word 2010, Skype, Firefox 7, Notepad, Notepad++
x64 アプリ:Notepad
以下のアプリでは、日本語入力の読み上げは不完全ですが、クラッシュしにくくなりました:
x86 アプリ:Wordpad, IE8
x64 アプリ:Wordpad, IE9
変更内容は下記のリビジョンです:
lp:~nishimotz/nvdajp/betterInput 4237
スナップショット jpdev111105 にて、以下の現象が確認されています。
・「全角・半角キー」を押したときに「日本語オン」「日本語オフ」を読みあげない。
・変換キーを押した直後に選択される候補を読みあげない。
・x64 環境でメモ帳の日本語サポートが有効にならない。
2011.3j にて改善されましたが、完全ではないため、マイルストーンを 2012.1j に変更します。
Windows 7 sp1 x64 + Word 2010 (x86) で日本語入力と NVDA 2012.1j-beta2 の起動・終了を交互に行うと、確実ではありませんが Word がクラッシュすることがあります。
確実な対策ではありませんが、nvdajpime の終了処理のタイミングを遅らせることにしました。
lp:~nishimotz/nvdajp/releases_2012.1 rev 5059
shinke さん [nvda-japanese-users:372] [nvda-japanese-users:373] skype使用中にnvdaを終了させたときに発生する不具合
現象 skypeを使用中に日本語入力操作をした後、nvdaを終了させるとnvdaの警告音が発生してskypeが異常終了する。
検証環境 nvda2011.1.1j、WinXP Pro(SP3)、MS-IME2002 ver8.1、skype ver.5.1.0.104
暫定的な対策としてnvdaの読み上げモード切替(NVDA+sキー)により対応いただけないでしょうか。
マーチン@まほろば さん [nvda-japanese-users:376] [nvda-japanese-users:377]
SKYPE だけでなく、VISTAのメモ帳でも起きました。XPのメモ帳では起きていません。
現象 1.nvdaを起動した状態で、メモ帳を開いて 2.日本語入力をON にして、文字を入力し確定する。 3.nvda を終了する。 4.メモ帳で、文字を入力しようとすると、 「メモ帳は動作を停止しました。」のダイアログが表示される。
検証環境 ・nvda2011.1.1j、WinVista Home(SP2)、MS-IME2010(14.0,4737,1000)
なお、以下の環境では、起きていません。 ・nvda2011.1.1j、WinXP Home(SP3)、MS-IME2003 9.0.8161.0
前のメールに追加ですが、Excel 2007 でも同様な現象が起きました。
現象 1.nvdaを起動した状態で、Excel 2007を開いて 2.日本語入力をON にして、文字を入力し確定する。 3.nvda を終了する。 4.Excelで、文字を入力しようとすると、 「Microsoft Office Excelは動作を停止しました。」のダイアログが表示される。
検証環境 ・nvda2011.1.1j、WinVista Home(SP2)、MS-IME2010(14.0,4737,1000) Excel 2007
なお、本家 nvda 2011.1.1 では、メモ帳でも Excel でも発生しませんでした。
追記:上記の Vista は32bit環境とのこと。
もり@静岡 (@mikasa231) さん [nvda-japanese-users:385]
表題の件、 VC2008 でプログラムをつくって確認しましたが、 下記の特徴があるようです。
【確認環境】Windows 7 Professional v6.1 (ビルド7600) 64bit (SP1未適用)
■32ビットコードでコンパイルしたアプリでは、 IME入力中の読み上げがなされる。 NVDA終了してから入力すると異常終了(アクセス違反)発生。
■64ビットコードでコンパイルしたアプリでは、 IME入力中の読み上げがなされず、 NVDA終了してから入力しても異常終了(アクセス違反)発生せず。
どうも、32ビットアプリ時のIME読み上げ関連で問題が起きているようです。 なお、エラーで落ちるときは、対象アプリの TransrateMessage関数が実行されているときです。 直前のWindowProcには WM_GETTEXT が飛んできているようです
ここで、「32ビットアプリで、IME読み上げがない場合にどうなるか?」を 検証しようと思いましたが、NVDAメニュー→キーボード設定→入力読み上げを OFFにしてもIME読み上げをカットすることができず、検証できませんでした。
追記:Ticket ID: 25047 に一部の事象を分離しましたが、再検討して、このチケットのタイトルを変更し、再統合しました。