web-dev-qa-db-ja.com

Alt + Tabが最小化されたウィンドウに切り替わらないようにする

これに対するさまざまな解決策を見てきましたが、どれもうまくいきませんでした。

どうすれば防ぐことができますか Alt+Tab Windows 10で最小化されたウィンドウに切り替えますか?

6
kofifus

解決策は使用することです Alt+Esc

最小化されたウィンドウをスキップして、次の開いているウィンドウに切り替えます。さらに重要なことは、Windowsシェルがハングアップし、 Alt+Tab 動作を停止します

残念ながら、このすべての興奮が Alt+Tab、別のホットキーがひどく無視されています。 Windows 2.0は Alt+Esc ホットキー。一方 Alt+Tab アプリケーションを選択できます Alt+Esc それらを循環させることができます。

押すと Alt+Esc、アクティブウィンドウがウィンドウスタックの一番下に送られ、その下にあるウィンドウをzオーダーで新しいアクティブウィンドウにすることができます。次のウィンドウが最小化されたウィンドウの場合、最小化されたままになります。これは煩わしく聞こえるかもしれませんが、最小化したアプリケーションを開かなくてもスキップできるので、実際には便利なデバイスです。

Raymond Chenが語る Alt+Tab そして Alt+Esc ホットキー

6
phuclv

次のAutoHotkey v1.1のスクリプトは、ウィンドウが最小化されたときにそれを検出し、ウィンドウスタイルを一時的に変更してalt-tabリストの最後に強制的に移動することで、この問題を修正します。スクリプトはバックグラウンドで実行され、特定のホットキー(または任意のホットキー)を使用する必要はありません。

; Use a Shell hook to detect minimize and fix the alt-tab order.
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellHook")
DllCall("RegisterShellHookWindow", "ptr", A_ScriptHwnd)

ShellHook(wParam, lParam)
{
    if (wParam != 0x5) ; HSHELL_GETMINRECT
        return
    hwnd := NumGet(lParam+0)
    WinGet minmax, MinMax, ahk_id %hwnd%
    if (minmax = -1) ; Minimized
    {
        ; Remove the window from the alt-tab list temporarily to force
        ; it to the end of the list.  To do this, temporarily apply the
        ; WS_EX_TOOLWINDOW style and remove WS_EX_APPWINDOW (if present).
        WinGet oldxs, ExStyle, ahk_id %hwnd%
        newxs := (oldxs & ~0x40000) | 0x80
        if (newxs != oldxs)
        {
            WinSet ExStyle, % newxs, ahk_id %hwnd%
            WinSet ExStyle, % oldxs, ahk_id %hwnd%
        }
    }
}

警告:ウィンドウの拡張スタイル属性を(一時的に)変更するため、一部のウィンドウに悪影響を及ぼす可能性があります。テスト中に問題は観察されませんでした。

ウィンドウをalt-tabから一時的に削除すると、ウィンドウがほぼでリストの最後に移動したことがわかりました。連続して複数のウィンドウを最小化すると、最初のウィンドウが最後に表示され、後続の最小化された各ウィンドウが他のウィンドウの前に挿入されます(他のすべてのウィンドウの後に挿入されます)。

Windows 10 v1709でテストしました。他のシステムでは結果が異なる場合があります。

4
Lexikos

@LưuVĩnhPhúcの提案に同意し、多かれ少なかれそれを行う短い AutoHotkey スクリプトを作成しました。

スクリプト

forward := true
cycling := false

~Alt Up::
if cycling
    forward := !forward
cycling := false
return

!Tab::Cycle(forward)
!+Tab::Cycle(!forward)

Cycle(direction)
{
    global cycling
    if direction
    {
        send !{Escape}
    }
    else
    {
        send !+{Escape}
    }
    cycling := true
}

!Escape::!Tab

プログラムをインストールし、これを.ahkどこかにファイルして実行します。設定されます Alt+Tab 使用する Alt+Escape そして Alt+Shift+Escape 交互に切り替えて、前後に切り替えることができます。最後の行は、 Alt+Escape 通常として機能します Alt+Tab、その機能に引き続きアクセスしたい場合に備えて。必要に応じて削除できます。

注意事項

  1. このスクリプトは変更されます Alt+Tab どちらかに Alt+Escape または Alt+Shift+Escape、リリースするたびに方向を変える Alt ウィンドウを切り替えた後のキー(つまり、 Tab) 少なくとも一度は。

    これは背後にあるメカニズムを変更しません Alt+Escape、だからあなたが保持する場合 Alt そして押す Tab 2回、最後の2つ前のウィンドウにアクセスできない場合があります。また、方向が「逆」になっている場合、最近のウィンドウが表示される前に、「古い」ウィンドウ(しばらく使用していないウィンドウ)が表示される場合があります。最後に切り替えたウィンドウを除いて、あなたはそれを手に入れます(それが私がそもそも方向を反転させた理由です)。

  2. Ctrl+Alt+Tab それでも元の機能は保持されます-つまり、通常の機能を使用します Alt+Tab 機構。それについて何をしたいかわからない。

より複雑な代替

別のオプションは、現在最小化されているすべてのウィンドウを非表示にしてそれらを復元できるプログラムを作成してから、オートホットキーを使用して Alt+Tab そのプログラムをアクティブにして、最小化されたすべてのウィンドウを非表示にしてから、 Alt+Tab 通し、放したときに再び表示させる Alt ウィンドウを切り替えた後(押した場合に行う必要はありません) Alt 他の理由による)。

ただし、これにはさらに多くの作業が必要であり、ウィンドウを切り替えているときにタスクバーで開いているアプリケーションが変更され、停止すると元に戻るため、奇妙に見える場合があります。

これを行うことを選択した場合は、単にプログラムを呼び出さないように注意することをお勧めします Alt+Tab、しかしあなたが押し続けてから初めてあなたがその組み合わせを押すときだけ Alt

2
Tomer Godinger

このタイプのものには2つ目の「仮想デスクトップ」を使用します。これは非常にうまく機能します。
アプリ/ウィンドウをセカンダリ/ターシャリ/ ...デスクトップに移動できます。そのデスクトップにはタブのサブセットしかありません(私は Alt+Tab 絶えず、私はあなたの「問題」にかなり一致しています。

ドラッグドロップは、アプリをすばやく移動するために機能します。特定のタスクに対してより永続的な仮想デスクトップを使用する場合は、他のショートカットとマネージャーがあります。

1
PeteG