Mery以外のタスクバーボタンをクリックしてもウィンドウが切り替わらない

  1. Kuroさん、こんにちは。

    Ver 3.5.5で追加された「メニューの項目を選択した状態からの右クリックでポップアップメニューを表示できる機能」について気になることがあったのでフォーラムに投稿いたしました。

    例えば、メニューバーの「ツール」→「プラグイン」→「プラグインの設定」をクリックした後、「Outline」を選択した状態で「プロパティ」をクリックしてアウトラインウィンドウを出します。
    この状態でMery以外のタスクバーボタンをクリックしてウィンドウを切り替えることができます。

    https://imgur.com/a/j1vMloM

    ですが、メニューバーの「ツール」→「プラグイン」→「アウトライン」を右クリックしてポップアップメニューを出した後、「プロパティ」を選択してアウトラインウィンドウを出してからタスクバー上のタスクバーボタンをクリックしても、クリックしたタスクバーボタンがオレンジ色に点滅するだけでウィンドウが切り替わりません。
    多分、この時にMeryで何らかのロックがかかっているのかもしれません。

    https://imgur.com/a/ZDTmOVG

    前者と後者で動作が異なるので、どちらかに統一したほうが分かりやすいかと思います。
    個人的には前者の動作のほうがロックがかからなくて好みです。

    なお、この現象はアウトライン以外にも「マクロ」→「カスタマイズ」を右クリック→「キーボード ショートカットの割り当て」など、メニューの項目を選択した状態からの右クリックで出現するポップアップメニューに表示されているものであれば発生します。

    使用環境は下記の通りです。

    【使用環境】
    ・Windows 10 Home 22H2(64ビット)
    ・Mery Ver 3.5.9 (64ビット)
    ・マクロ:なし
    ・プラグイン:アウトライン

     |  MSY-07  |  返信
  2. ご報告いただき、ありがとうございます。

    現象を確認しました。

    > 前者と後者で動作が異なるので、どちらかに統一したほうが分かりやすいかと思います。

    この動作は、Mery 側で意図的に行っているものではありません。

    Mery と同様に、右クリックでメニューの上にメニューを表示できる機能がある EmEditor さんでも同様の動作となっているようです。

    そのため、Windows の仕様 (または不具合) が影響している可能性が考えられます。

    現在、対策について調査中ですが、具体的な情報はまだ得られていない段階です。

    引き続き調査を続けますので、もし手掛かりになりそうな情報をお持ちの方がいらっしゃいましたら、ご協力いただけると助かります。

     |  Kuro  |  返信
  3. 引き続き、調査を進めている最中ですが、進捗を共有させていただきます。

    調査を進めていく中で、Windows のポップアップ メニューが OS 自体の長年のバグとして、正常に消えない現象が報告されていることを確認しました。この問題が存在するため、タスクバーがロックされる現象が発生する可能性があります。

    【参考】https://groups.google.com/g/borland.public.cppbuilder.vcl.components.using/c/0vZ9_B9pwc0/m/T4TmeOZbMqoJ

    バグ回避の方法として以下のトリックが紹介されており、試してみた結果を共有いたします。

    (1) WM_NULL を送信する方法

    SetForegroundWindow(Handle);
    // display menu
    SendMessage(Handle, WM_NULL, 0, 0);

    この方法は効果的で、タスクバーがロックされる現象を回避することができました。ただし、Delphi との相性による不安定な挙動が見受けられました。

    (2) WM_CANCELMODE を送信する方法

    SendMessage(Handle, WM_CANCELMODE, 0, 0);

    こちらの方法も効果があり、タスクバーのロックを回避できました。しかし、この方法は 1 段階目のメニューを確実に閉じてしまうため、特定のケースでの利用に制約が生じます。

    また、ChatGPT からの情報によると、TPM_RECURSE フラグの使用によって、一部の Windows バージョンでタスクバーがロックされるという報告があるようです。

    【ChatGPT から引用】
    TPM_RECURSE フラグは、コンテキストメニューが別のメニュー項目を選択した場合に再帰的にサブメニューを表示する際に使用されますが、このフラグを使うことで一部のバージョンの Windows でタスクバーがロックされるという報告がされているようです。(OpenAI, 2023)

    これを踏まえて、以下の対策が提案されました。

    (1) TPM_RECURSE フラグの使用を避ける
    → メニューの上にメニューを表示する機能を使用しない。

    (2) 別の方法でサブメニューを表示する
    → Windows のメニューを使用せず、独自のメニューを作成する。

    (3) マイクロソフトへの報告
    → マイクロソフトにバグの修正を提案する。

    また、私自身が考えた方法として、以下の方法があります。

    (1) 別スレッドでコマンドを実行
    → 効果はありましたが、予期しない不具合のリスクがあるかもしれません。

    (2) タイマーを使用してコマンドを遅延実行
    → メンテナンス性の低下につながる可能性があります。

    (3) キューを使用してコマンドを遅延実行
    → ある程度の安定性とメンテナンス性のバランスを保ちつつ遅延実行できる方法です。

    ただし、これらの方法も、OS のバージョンや環境によっては期待通りに動作しない可能性があるため、完全な解決策とは限りません。

    現在のところ対策が難しい状況ですが、引き続き調査を進めています。時間がかかりすぎる場合は、対応が難しいこともあるかもしれませんので、ご了承くださいませ。

     |  Kuro  |  返信
  4. Ver 3.6.0で修正されたのを確認しました。

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

     |  MSY-07  |  返信
  5. ご確認ありがとうございます。

    うまく動作しているようで、安心しました。

    しかしながら、対症療法的なアプローチであり、Windows のアップデートなどによって対策がうまく機能しなくなる可能性も考えられます。

    現象が再発した場合、その際に再検討いたしますので、ひとまずはこれで様子を見ていただければと思います。

     |  Kuro  |  返信
  6. Kuroさん、こんにちは。

    タスクバーのボタンをクリックしてMeryから他のアプリに切り替えようとしても、他のアプリのウィンドウが前面に出ないことがあったため報告します。

    頻度としては毎回発生するわけではなく、たまに発生するぐらいです。

    また、この現象は「Alt + Tab」でアプリを切り替えた場合でも発生します。

    それで、一度Meryを最小化して、その後にタスクバーの他のアプリのボタンをクリックすると、他のアプリのウィンドウが前面に出ます。
    この対処法は「Alt + Tab」の場合も同じです。

    下記URLに画面録画したものを掲載しておきます。
    なお、画面録画にはSnipping Toolを使用しました。

    https://imgur.com/gallery/LbjfceH
    https://imgur.com/gallery/alt-tab-cLUIymJ

    もしかしたらおま環の可能性も考えられますが、一応報告ということで。

    【環境情報】
    Mery: 3.7.6 (x64)
    Onigmo: 6.2.0
    C/Migemo: 1.3
    Tidy: 5.8.0
    Hunspell: 1.7.1
    アウトライン: 3.2.1 (Outline.dll)
    Markdown プレビュー: 1.0.7 (MarkdownPreview.dll)
    検索 バー: 1.0.6 (FindBar.dll)
    OS: Windows 11 (Version 23H2, OS Build 22631.4169, 64-bit Edition)

    【環境情報(マクロ)】
    最新版を確認
    ファイルを比較
    Wikipediaマークアップ修正

     |  MSY-07  |  返信
  7. ご報告ありがとうございます。

    確認しましたが、私の環境では現象が再現されませんでした。

    いただいたキャプチャを見る限りでは、他のアプリが Mery の背面に隠れているものの、切り替え自体は行われているように見えますね。

    Mery の [ウィンドウ] メニューにある [常に最上位] のチェックが入っていないか、または [常に最上位] にショートカット キーが割り当てられていないかご確認いただけますでしょうか。

    初期設定では、Mery を終了すると [常に最上位] は自動的にオフになるため、現象が発生しているときに再度確認してみてください。

    もしかすると、何かの拍子にショートカット キーによって [常に最上位] がオンになっている可能性があります。

    また、導入されているプラグインやマクロがこの設定を変更することはないと思いますので、他の原因として考えられるのは、外部アプリがウィンドウの制御を行っている場合などかもしれません。

     |  Kuro  |  返信
  8. Kuroさん、ご返信ありがとうございます。

    > Mery の [ウィンドウ] メニューにある [常に最上位] のチェックが入っていないか、または [常に最上位] にショートカット キーが割り当てられていないかご確認いただけますでしょうか。

    今まで [常に最上位] は何に使うんだろうと思っていましたが、下記URLのコマンドリファレンスを見たら「現在のウィンドウを常に手前に表示または解除します。」と書いてあったので、やっと使用方法が分かりました。

    https://www.haijin-boys.com/wiki/コマンド_リファレンス:ウィンドウ#常に最上位

    確か、[ツール] メニューの [オプション] をクリックしようとしたときに、隣にある [ウィンドウ] メニューの [常に最上位] を何度か誤クリックした記憶があります。

    それで、[常に最上位] にチェックが入ったまま他のアプリのタスクバーのボタンをクリックしていた可能性がありますね。

    なお、確認したところ、[常に最上位] にショートカットキーは割り当てられていないため、ショートカットキーによってオンになった可能性はないですね。

    > 初期設定では、Mery を終了すると [常に最上位] は自動的にオフになるため、現象が発生しているときに再度確認してみてください。

    現象が発生しているときに再度確認してみます。

    あと、てっきりバグだと思って勘違いしてしまいました。
    お騒がせしてすみませんでした。

     |  MSY-07  |  返信
  9. ご返信ありがとうございます。

    > それで、[常に最上位] にチェックが入ったまま他のアプリのタスクバーのボタンをクリックしていた可能性がありますね。

    なるほど、いただいたキャプチャをじっくり見てみると、ツール バーの押しピンボタン (常に最上位) がオンになっているようですね。おそらく、何かの拍子に [常に最上位] をオンにしてしまったのだと思います。

    > なお、確認したところ、[常に最上位] にショートカットキーは割り当てられていないため、ショートカットキーによってオンになった可能性はないですね。

    ショートカット キー以外でも、Alt + キー入力の組み合わせはメニューのショートカット (アクセラレータ キー) として機能します。

    たとえば、Alt + W → A の順に押すと、[常に最上位] が有効になってしまうんですよね。

    そのため、他のコマンドやマクロに Alt + W 周辺のキーを割り当てている場合、うっかりその操作が入ってしまった可能性もありますね。

    > あと、てっきりバグだと思って勘違いしてしまいました。
    > お騒がせしてすみませんでした。

    ウィンドウが前面に出たり出なかったりするのは、Windows の仕様でこれまでにも問題が発生したことがあるので、「バグかな?」と思ってしまうのも仕方ないですよね😅

    私も「またゲイツかー」と思いましたが、今回は違ったようで一安心です。これで次のバージョンの開発に取り掛かれそうです。

    …とはいえ、Ver 3.7.6 のリリース以来、フォーラム対応が続いていて休暇が取れていないので、少し休養させていただきます。Ver 3.7.7 の開発はそのあとにがんばりますねー

     |  Kuro  |  返信
  10. Kuroさん、ご返信ありがとうございます。

    > なるほど、いただいたキャプチャをじっくり見てみると、ツール バーの押しピンボタン (常に最上位) がオンになっているようですね。おそらく、何かの拍子に [常に最上位] をオンにしてしまったのだと思います。

    キャプチャを確認したら、確かにツール バーの押しピンボタン (常に最上位) がオンになっていました。

    普段はツール バーを使用していないので気づかなかったです😅

    > ショートカット キー以外でも、Alt + キー入力の組み合わせはメニューのショートカット (アクセラレータ キー) として機能します。
    >
    > たとえば、Alt + W → A の順に押すと、[常に最上位] が有効になってしまうんですよね。
    >
    > そのため、他のコマンドやマクロに Alt + W 周辺のキーを割り当てている場合、うっかりその操作が入ってしまった可能性もありますね。

    メニューのショートカット (アクセラレータ キー) という選択肢もありましたね。

    ですが、他のコマンドやマクロに Alt + W 周辺のキーを割り当てていないので、うっかり操作した可能性は低いと思います。

    > ウィンドウが前面に出たり出なかったりするのは、Windows の仕様でこれまでにも問題が発生したことがあるので、「バグかな?」と思ってしまうのも仕方ないですよね😅
    >
    > 私も「またゲイツかー」と思いましたが、今回は違ったようで一安心です。これで次のバージョンの開発に取り掛かれそうです。

    これまでの経験則で「今回もバグかな」と思ったのは早計でした。

    次のバージョンは色々な機能の追加や改修があって大変だと思いますが、楽しみにしています。

    > …とはいえ、Ver 3.7.6 のリリース以来、フォーラム対応が続いていて休暇が取れていないので、少し休養させていただきます。Ver 3.7.7 の開発はそのあとにがんばりますねー

    ここ数週間でいくつかの要望と修正依頼を出したので、申し訳ないです😥

    私個人としては要望と修正依頼は出尽くしたので、現時点ではこれ以上提案することはありません。

    ゆっくり休んでください。

     |  MSY-07  |  返信
スポンサーリンク