2020年02月20日

Windows10を1909アップデートしたら、エクスプローラーの検索窓のIME状態の挙動が変わった?

一昨日、フィードバックから、Windows10をver.1909にアップデートしたら、エクスプローラーの検索窓のIME状態を変えられなくなった、というご意見をいただきました。

NumLockLockでIME状態を自動でONにする設定をしていたのだが、どうも、そうならなくなったとのこと。(もちろん手動では変えられる)

実際、手元の環境で試してみると、再現できました。
最近のWindowsでの挙動の変化ということらしいですが、詳細は不明です。

202002_NLLIME1.png

NumLockLockを常駐させ、IMEが常にONになるように設定した場合、普通のウィンドウ上(管理者権限で動作しているウィンドウを除く)であれば、IMEを常にONにする機能が働きますが、上記の画像のように、エクスプローラ右上の検索窓にカーソルを置いた場合に限り、この機能が働きません。

これは何が起きているのか?

実際、プログラム中で何が起きているのかと思い、デバッグ用のコードを仕込んでみました。

202002_NLLIME2.png

hActiveWindowは、GetForegroundWindow() APIで取得したウィンドウハンドルです。
これに対し、SendMessageでWM_IME_CONTROLで0x05(IMC_GETOPENSTATUS)を送ると、IME状態がONなのかOFFなのかを取得することができます。

上記の画面のような状態で、WM_IME_CONTROLの5(IMC_GETOPENSTATUS)が何を返しているのか調べました。
デバッグ用の仕込みを入れることで、IMEがONであると認識していれば、Windowsの標準の警告音が鳴り続けます。

で、実際動かしてみたら、Windowsの標準の警告音が鳴り続けました。
(画面上、IME状態はOFFであるにも関わらず!)

というわけで、画面上のステータスと、Windows APIが返すステータスが不一致であるという、よくわからない現象に遭遇していることが分かりました。
ユーザーの情報によれば、この現象はWindows10を1909にアップデートしたら起きるようになったとのことなので、他のバージョンでは起きないものと思われます。

さて、何が起きているのか? 例えば、次のようなことが考えられます。

  • エクスプローラーの検索窓だけ、管理者権限で動いているため、外部のウィンドウメッセージを受け付けてくれない。
  • カーソルが置かれている窓と、GetForegroundWindow()が返すウィンドウハンドルが、実は異なっている。例えば、編集ボックス自体と、プルダウン表示している最近入力した選択肢のウィンドウが別で管理されており、画面上のIME状態表示とWM_IME_CONTROLが返す値が異なっている、あるいは、見た目カーソルの置かれているアクティブな入力窓とGetForegroundWindow()が返すウィンドウハンドルがそれぞれ別のものを指した状態になってしまっている。

フィードバックでは、ユーザーからは状況の改善を依頼されているのですが、悪化したのはOSの側(プログラムに画面状態とは異なるウソ情報を返している?)な感じがするため、ちょっと一介の日曜プログラマの手には負えない感じがしています。OSの次回アップデートで状況が改善するのを祈るのみな気がします。



posted by ayacy at 00:00 | Comment(4) | TrackBack(0) | プログラミング

2019年12月09日

ちょっと気持ち悪く思っていた処理の見直し。「マウスのお供」の設定読書き処理

先月上旬マウスのお供で、時報のところの「複数音指定」チェックボックスを新設しました。
これをチェックすると、通常のサウンドファイル指定の編集ボックスが非活性になり、「参照」ボタンが「選択」ボタンに切り替わり、その「選択」ボタンを押すと、各時刻ごとに時報の音を別々に指定できるダイアログが出現します。

201911_tk_multisignalsel.png

で、この設定の読み出し/書き込みの処理のところが、ずっと気持ち悪かったのです。
0時〜23時の設定読み書き処理を、ループを使わずにフラットに書いていたのです。

というわけで、その部分を修正したバージョン 1.61.12βを、昨日付で公開しました。

リソースリークのバグの件もあるので、今週中になるはやで正式版公開にしたいと思っていますが、ちょっと気にしているのが、このままでいくと、バージョン番号に「13」という数字が入ってきてしまって、ちょっと縁起が悪そうなのでどうしようかな、と。13を飛ばして14にすることも含めて考え中です。

posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2019年12月08日

「マウスのお供」リソースリーク調査結果

「マウスのお供」でリソースリークが発生している可能性が濃厚になっていた件ですが、その後、ユーザーからの情報提供で一気に状況が進み、無事に原因判明&修正版のβ版公開まで進めることができました。

情報提供にご協力頂いた方に感謝いたします。

詳細は昨日の記事の追記部分を参照でお願いします。
201912_mtmo_bug.png

上記のスクリーンショットのように「項目間に区切り線を引く」をONにしたとき、時計やメモなどの間に区切り線を引くようになりますが、この区切り線を引くためのペンハンドル(HPEN)が解放漏れしており、リソースリークになっていました。最悪、OSの再起動が必要になります。

項目間に区切り線を引く」をONにしないと、ペンハンドルは作られないため、問題が表面化しません。
そのあたりが、原因調査が難航した要因でした。

β版は更新しましたが、正式版にバグが残った状態が持続するのも気持ち悪いので、報告者の方の問題解決を確認した後、今週中(12/9週)には正式版の方も更新したいと考えています。

posted by ayacy at 00:57 | Comment(0) | TrackBack(0) | プログラミング