itagagaki
@itagagaki (板垣 史彦)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Windowsのアクティブウィンドウを選んで切り替える

Discussion

Windowsは、アクティブウィンドウを切り替える手段として、タスクバーをクリックする他に、Alt+Tabで切り替えるウィンドウを選択することができますけど、これ、使い勝手が今一つなんですよね。なので、もっと使いやすいユーティリティーが無いものか(あるだろうと思って)探してみたんですが、これ!というものが見つかりません。もし良いものをご存じの方がいらっしゃいましたら、是非教えてください。

見つけたものの1つに窓替えがあります。これはなかなか良かったのですが、以下の問題(不満)があります。

  • 最小化されているウィンドウも選択リストに含めている
  • ウィンドウのアイコンではなくEXEのアイコンを表示している。そのためウェブアプリは軒並みブラウザーのアイコンになってしまっている
  • テキスト情報が冗長すぎて選びたいものをぱっと見つけにくい

OSSではないようなので開発者に要望するしか無さそうですが、連絡を取る手段が無いようです。Vectorにはコメントを残しておきましたので、それに気付いてくれるといいのですが。

もう1つ、christianrondeau/GoToWindowというのを見つけました。これもまあまあ良い感じなのですが、以下の問題がありました。

  • アイコンを表示できていないものがある
  • 一覧表示が遅い

こちらはOSSでMITライセンスでしたので、フォークして、アイコンの問題については修正できました。しかし動作が遅いのは今のところ解決策がありません。解析してみたところでは、「こいつのせいで無駄に時間がかかっている」といったような箇所は特になく、ウィンドウの一覧の取得、それぞれのタイトルやアイコンなどの取得、それを一覧表示するための各種インスタンス生成といったことでちょっとずつの時間が積もり積もって山となっている感じです。

何か良いソリューションがありましたら教えてください。

0

Win+Tabは以下の点で、望んでいることと少し違います。

  • マルチモニターの場合、ウィンドウが位置しているディスプレイ別に仕分けられて各モニターに分かれて表示されてしまう
  • ウィンドウの中身はすぐに表示されるが、アイコンとウィンドウタイトルの表示は少し遅れる
  • 視覚的にデスクトップ全体を使ってダイナミックに絵替わりするのでめまいがする
  • 表示がバタつく

Alt+TabWin+Tabもウィンドウの中身を表示しますが、それはそんなに有難くはないんですよね。それで直感的に見つけられる場合もあるけども、異なるフォルダーを表示しているエクスプローラーが複数あったり、コードを表示しているウィンドウが複数あったりする場合、そのウィンドウの絵面などより、ウィンドウタイトルを見るほうが見つけやすい。なので開かれているアイコンとタイトルだけのリストがぎゅっとまとまってほしいのです。

0Like

その手のアプリを作ったことがある経験者ですけど
現在のWindowsのバージョンでWindowのタイトルは取得できなかったかと思います
(管理者権限があれば別ですが)

エクスプローラーをタブで開いたりするときやブラウザがそうですが
開いてるタブを認識させたいためタイトルを取得しようとしましたができませんでした

マイクロソフトが複数画面でWindowをきれいに並べるのを標準機能で推奨しているみたいなので
今、そういうアプリを作るひとが少ないと思います
※大昔のWindowsでは理想のアプリがあった気がしますがもちろん今は動作しません

0Like

情報ありがとうございます。
ウィンドウタイトルに関しては、私が挙げた2つのアプリは取得できていて、「GoToWindow」のコードを見ると、user32.dllのGetWindowTextを呼んでいました。
Windowsのバージョンは10 Pro(22H2)です。
もしかして11だとダメだったりするんでしょうか。

0Like

こちらの環境によるものもあるのですが
FindWindowでハンドルを取得してGetWindowTextで正しく取得できないことがあったのと

取得したハンドルを利用したWindow操作を行うプログラムを1年前に作っていたのですが
Windowsが思ったような動きをせずに
さらにハンドルを利用したプロセス間通信が
「不明な動作を行うアプリケーション」
としてセキュリティに弾かれるため、そこで開発を停止させたことがあります

自分も狭い画面で様々なウインドウを開いて操作しているので
それを解消させる意味もあって作ったアプリだったのですが
この手のアプリを開発するための資料や書籍がほとんどないのでなかなか進みません

0Like

ちなみにどんな表示や操作を望んでいるのでしょうか?

自分でも便利な感じがしたら作るかもしれません

0Like

情報ありがとうございます。いろいろ問題があったわけなんですね。
私が期待したいのは:

  • ホットキーで、開いているウィンドウのリスト(アイコン+タイトル)が現れ、クリック、または矢印キーで選んでスペースまたはEnterキーで、そのウィンドウがアクティブとなり最前面となる

というものです。

以下は窓替えの表示です。リストの表示場所はオプションでいろいろ選べるのですが、現在のマウスポインタの位置に表示してくれるのが一番使いやすいと感じています。
2025-02-04 08.56.24.png

「窓替え」の残念なところは、

  • 開いていないウィンドウも含まれている
  • テキストが冗長で、ぱっと選べない
  • ウェブアプリ(QiitaとYouTube)がChromeアイコンになっている
  • 表示の高速化のためか、一発目では現在開いているウィンドウがリストに無いことがある

以下はGoToWindowの表示です。これはメインディスプレイの中央に表示されます。アイコン表示は私が修正して期待どおりのものが表示されるようにしました。アイコンとタイトルの間の少し空いているところにはアプリ名が入っていたのですが、この取得にちょっと時間がかかっていたので、削除しました。
2025-02-04 08.59.01.png

不満は、ホットキーを押してからリストが表示されるまで数百ミリ秒かかっていることです。

0Like

わかりやすい説明ありがとうございます

ホットキーはRegisterHotKeyを使えばいけそうなので意外と簡単なのかも?

切り替えるWindowが決まっているのならマウス操作よりも
ホットキーに登録したWindowを手前に持ってくる
の方が操作手順が少なくできそうですね

最初は自分用ですが作ってみたいと思います

0Like

進捗がわかるように記事化しました、途中で挫折してたらごめんなさい、ただしく表示するにはWindows10用のAPIを呼ぶ必要があるようです

1Like

Your answer might help someone💌