OS XのCmd + `のように、同じアプリケーションのウィンドウ間を切り替えるWindows 7のショートカット


38

特定のアプリケーションでのみウィンドウを切り替えるショートカットがWindows 7にありますか?OS Xのこの機能はとても気に入っています。Windowsで同等のものは何ですか?



<rant>この質問のように、RedmondがUXに焦点を合わせ、さらにWindowsキーショートカットを追加してほしい。不要なものの99%を提供してくれますが、Windowsを使いやすくすることで生活を楽にするだけではありません。私はそれがこのために新しいショートカットを追加するために、2つの時間のすべてを後輩プログラマーを取るだろうと思います。</暴言>。
ピート・アルビン

回答:


45

タスクバーの最初の10個のアプリケーションのいずれかである場合、 (Win)+ nnはその位置番号)はそれを選択し、ウィンドウを循環します。(使用0(ゼロ)第十アプリケーション用)。たとえば、私が使用できるように、WindowsエクスプローラとInternet Explorerが、私のタスクバー上の最初の二つのもののように固定してい+ 1私のディレクトリをサイクルにして+ 2私のブラウザから周期に。


奇妙なメモ:

  • 数字を長押しして入力(およびリリース)するとn、Windowsはタスクバーのn番目のアプリケーションを開き  ます。n 上で説明したように、繰り返しタップすると、そのプログラムのウィンドウが切り替わります。以下のよう  TranslucentCloudで述べたあなたが入力した場合、Shift+をn、それが意志を持つように逆の順序でそれらを循環、Alt+ Tab と  Ctrl+ Tab、など

    タスクバーのn番目のアプリケーションが固定されているが実行されていない場合、+ nはそれを開始します。 

  • ただし、最初から andを押し続けてShiftからを入力するとn、Windowsはそのアプリケーションの新しいインスタンス(または少なくとも新しいウィンドウ)を開始します(既に実行されている場合でも  (Windows Media Playerなど、複数のウィンドウを同時に実行できないアプリケーションの場合、これは失敗します。)
  • + nは、テンキーでは機能しないようです。

1
これは、タスクバーを拡張するマルチ画面の設定で動作するようには思えない
ERFAN

1
すばらしいです。そして、Win + Shift + 1は、ウィンドウを逆に切り替えます。
TranslucentCloud

24

Windows 7および8では、キーボードだけで利用できるショートカットはありませCtrlんが、興味のあるアプリのタスクバーアイコンをクリックしながら押し続けることができます。これを行うたびに、そのアプリに属する​​別のウィンドウが表示されます最前線に来てください。

さらに、VistaSwitcherプログラムは、Win+ F11Alt+ `を設定して、現在のアプリのウィンドウを切り替えます。(ちなみに、そのWebサイトではWindows 8はサポートされていませんが、8.1で幸運でした。これまで見てきた唯一の問題は、検索サイドバーのようなものを開いているウィンドウとして表示することです。それが、YMMV。)


2
巨大な生活の質の改善。専用のホットキーがより理想的ですが、WIN +#ソリューションは、アクセス可能なホットキー(1-4)と目的のスタートバーの場所の間に競合が生じることは言うまでもなく、キーの数、人間工学の悪さ、ひどい遅延によって厳しく制限されます。
bpcookson

1
VistaSwitcherは美しいです。提案をありがとう。
ダスティンオプレア

Windows 10の「新しい通知」や「Cortana」などのアイテムを除外リストに追加することもできます。
dragon78816年

1
私はビスタスイッチャープログラムが大好きです。
ルーク

1
という名前のvistaswitcherの後継のように見えます。これはalt-tab terminator、同じアプリケーション間でタブ移動する機能をもう持っていません
スターコーン

23

AutoHotkeyを使用できます:www.autohotkey.com

そして、このスクリプトをそこに置きます:

!`:: ; Next window
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
IF WinClassCount = 1
    Return
Else
WinGet, List, List, % "ahk_class " ActiveClass
Loop, % List
{
    index := List - A_Index + 1
    WinGet, State, MinMax, % "ahk_id " List%index%
    if (State <> -1)
    {
        WinID := List%index%
        break
    }
}
WinActivate, % "ahk_id " WinID
return

!^`:: ; Last window
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
IF WinClassCount = 1
    Return
Else
WinGet, List, List, % "ahk_class " ActiveClass
Loop, % List
{
    index := List - A_Index + 1
    WinGet, State, MinMax, % "ahk_id " List%index%
    if (State <> -1)
    {
        WinID := List%index%
        break
    }
}
WinActivate, % "ahk_id " WinID
return

私にとっては非常にうまく機能します。Autohotkeyを使用して、Macのようにコピー/貼り付け/取り消しなどのキーも作成しました。よく働く!

時代


2
これはいくつかの警告でうまく機能します:1)Chromeの場合、Slackのようなアプリケーションを含むすべてのChromeのようなウィンドウを循環させます!2)最新のアプリの場合-また、最新のアプリウィンドウが1つしか開いていない場合は、他の最新のアプリがランダムに開きます(つまり、カレンダーが開いていて、最新のアプリのみが開いている場合、[設定]が開きます。または「スポーツ」、または「メール」など)
カークウォル

@KirkWollそうです。間違いなく改善する余地があります。Autohotkeyを実際に掘り下げてそれを実現する時間がありませんでした
...-Seperman

素晴らしい仕事、すぐにそれを使用しました、ありがとう。いくつかのポイント:変数WinGet, List内のウィンドウの数を返しListます(List%n%ハンドルが格納されている擬似配列とは異なります)。そのため、WinGet, WinClassCount呼び出しをスキップしてList代わりに確認できます。また、コードは両方のホットキーで同一のようです。
レベニータ

Windows 10 64ビットとMicrosoft Office 2016では動作しません。助けてもらえますか?
ルーク

1
これはうまく機能しますが、デスクトップに関係なくすべてのウィンドウを切り替えるようです。タスクビューを広範囲に使用しており、同じデスクトップ上のウィンドウだけをジャンプする必要があります。
ペトル

8

Erasmoseに感謝しますが、autohotkeyスクリプトのバージョンは、そのタイプの他のウィンドウがない場合、ウィンドウを最小化します。時々あなたは知らない、そして最小化は見つけるための迷惑な方法なので、私はあなたのスクリプトを次のように修正した:

!`::    ; Next window
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
IF WinClassCount = 1
    Return
Else
WinSet, Bottom,, A
WinActivate, ahk_class %ActiveClass%
return

!+`::    ; Last window
WinGetClass, ActiveClass, A
WinActivateBottom, ahk_class %ActiveClass%
return

ああ、最後のクラスもctrlの代わりにshiftを使用するように変更しました。これは、他のいくつかのキーボードショートカットを逆方向に移動する修飾子だからです。オートホットキーが大好きです。


1
クール。あなたのコードとAutohotkeyのフォーラムで得たフィードバックに基づいてコードを更新しました。新しいコードは、Macのように最小化されたウィンドウをループしません。
Seperman 14年

@Seperman最小化されたウィンドウもループしたい場合はどうでしょう。それを行うには、スクリプトで何を変更する必要がありますか。
Ghos3t

これはうまく機能しますが、ChromeやChrome / Electronベースのアプリ(VS CodeやSlackなど)ではすべて動作するため、正しく動作しません。
otter.pro

ウィンドウクラス名を使用する代わりに、ElectronベースのアプリとFirefox / Thunderbirdでうまく動作するようにプロセス名を使用しました。gist.github.com/snmishra/794c5f41693510c46ba9bedc839696a8の
Satya Mishra

7

MDIを実装する一部のアプリケーションは、Ctrl + Tabを提供して、同じアプリケーションインスタンスで「ドキュメント」を切り替えます。たとえば、MS Office。ただし、これはWindowsの機能ではなく、アプリケーションに依存しています。他のソフトウェアには、さまざまなショートカットがあります。たとえば、Firefoxはこの機能を提供していませんが、機能を追加するアドオンがあります。

さらに、Windowsで提供されるキーボードショートカットのリストを以下に示します。

また、Windowsのキーボードショートカットに関する既存の議論もあります。

お役に立てば幸いです。


2
また、一部のプログラムはこれに(Ctrl)+(F6)を使用します。(逆方向に(Shift)を追加します。)
スコット14年

5

NeosmartのEasy Windows Switcherは、まさにあなたが望んでいることをします。

Easy Windows Switcher Webサイトの説明を次に示します。

Easy Window Switcherを使用するalt+`と、Macと同じように(Alt +バックティック)さまざまなウィンドウを簡単に切り替えることができます。alt+tabEasy Window Switcher を使用すると、100万から 1種類のウィンドウを開いて探しているウィンドウを見つける必要がalt+`なくなります。同じプログラムのウィンドウ間を移動するだけで済みます。


1
「常に」機能しない。しばらくの間、別のアプリケーションで作業していると、戻ってきて、動作しなくなります。
Dushyant Bangal

4

VistaSwitcherは、この機能を許可しています。Windows 10と互換性があります(ただし、名前はそうではないことを示唆しています)。Windows 8以降では、特定のメトロアプリを除外リストに追加することをお勧めします。

一番上の答えは良いですが、アクティブモニターにアイコンのみを表示するようにタスクバーが設定されているマルチモニターセットアップでは機能しません。


Win + nは、複数の画面とメインモニターのみに表示されるタスクバーを備えた私のW7システムで動作します。これは、あなたが意図していることですか、タスクバーを現在アクティブなモニターに切り替える方法です(気が散ると思います) ?
レベニータ


1

AutoHotkeyも使用すると、より自然な動作が得られます。

; Switch between windows of the same application with Alt+(key above Tab)
; Icon: made by Freepik (www.freepik.com), licence CC 3.0 BY
;       from https://www.flaticon.com/free-icon/switch-window_71630
; Script Licence: CC0 (Public Domain)
; Source: https://framagit.org/dr4Ke/AutoHotkey_scripts

KeyName := GetKeyName("sc029")
Menu, Tray, Tip, Switch between windows of the same applications with 'Alt+%KeyName%'

*!SC029::
WinGetClass, ActiveClass, A
WinGet, WinClassCount, Count, ahk_class %ActiveClass%
If WinClassCount = 1
    Return
WinGet, List, List, % "ahk_class " ActiveClass

index := 0
if not GetKeyState("Shift") {
    index := 1
}
;MsgBox, Entering Loop
While GetKeyState("Alt") {
    If GetKeyState("Shift") {
        index := Mod(List + index - 2, List) + 1
    } else {
        index := Mod(List + index, List) + 1
    }
    WinGet, State, MinMax, % "ahk_id " List%index%
    if (State == -1)
    {
        continue
    }
    WinID := List%index%
    WinActivate, % "ahk_id " WinID
    ErrorLevel := 1
    sleep 50
    While (ErrorLevel != 0) and GetKeyState("Alt") {
        KeyWait, sc029, DT1
    }
}
return

1

AutoHotkeyスクリプトを作成して、通常のWindow AppsChrome ShortcutsChrome Appsで動作する同じアプリケーションのウィンドウを切り替えます。

https://github.com/JuanmaMenendez/AutoHotkey-script-Open-Show-Apps/blob/master/AutoHotkey-script-Switch-Windows-same-App.ahk

追加

そのGithubリポジトリには、必要なホットキーを使用してアプリを開く、復元する、または最小化することができるため、このスクリプトと連携して動作する別のAutoHotkeyスクリプトがあります。

例:

  • F7:: OpenOrShowAppBasedOnExeName("C:\Windows\System32\SnippingTool.exe")
  • F8:: OpenOrShowAppBasedOnWindowTitle("Gmail", "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --app=https://mail.google.com/mail/")

1
これは、ChromeとElectronベースのアプリを同じように扱わないため、Chromeで正しく機能する唯一の答えです。Chrome、VS Code、Slackなどで完全に動作します(まれに、ウィンドウのタイトルが変更された場合、Mintty / Cygwin、gVim、Powershellなどの特定のアプリで正しくサイクルしませんでした)
otter。プロ

0

Windowsタスクスイッチャー(+ )とうまく統合するAutoHotkeyスクリプトを作成し、そのすべての利点を提供します:アプリウィンドウのプレビュー、クリックして選択、矢印キーナビゲーション、必要な単一ウィンドウのみをアクティブにします。+ および+ + (バックティック)で呼び出し/ナビゲートして、現在のウィンドウと同じプロセス名を持つウィンドウ間を循環します。(ピン留めされたスロット番号を覚える必要はなく)どのアプリでも機能するため、これは+ よりも使いやすく、ウィンドウプレビューは大きく、背景はぼやけず、+とシームレスに混ざります。AltTabAlt`AltShift`WinnumAltTabナビゲーション。Windows 10でテスト済み。

主なトリックは、設定WS_EX_TOOLWINDOWおよび設定解除により、ターゲットではないアプリケーションウィンドウをタスクスイッチャーから一時的に非表示にすることですWS_EX_APPWINDOW。管理者として実行しているウィンドウにこれらのウィンドウスタイルを設定するには、AutoHotkeyに署名するか、adminとして実行する必要がありますここで非常に簡単な署名手順に従いました

貢献したいくつかの関連スレッド:

!`::
{
   WS_EX_TOOLWINDOW = 0x80
   WS_EX_APPWINDOW = 0x40000
   tw := []
   aw := []

   WinGet, processName, ProcessName, A

   DetectHiddenWindows, Off
   AltTab_window_list(1)

   Loop, %AltTab_ID_List_0%
   {
      wid := AltTab_ID_List_%A_Index%
      WinGet, processName2, ProcessName, ahk_id %wid%

      if (processName2 != processName)
      {
         WinGet, exStyle2, ExStyle, ahk_id %wid%

         if (!(exStyle2 & WS_EX_TOOLWINDOW))
         {
            tw.InsertAt(0, wid)
            WinSet, ExStyle, ^0x80, ahk_id %wid%
         }

         if ((exStyle2 & WS_EX_APPWINDOW))
         {
            aw.InsertAt(0, wid)
            WinSet, ExStyle, ^0x40000, ahk_id %wid%
         }
      }
   }

   Send {Alt Down}{Tab} ; Bring up switcher immediately

   KeyWait, ``, T.25  ; Go to next window; wait .25s before looping
   if (Errorlevel == 0)
   {
      While ( GetKeyState( "Alt","P" ) )
      {
         KeyWait, ``, D T.25
         if (Errorlevel == 0)
         {
            if (GetKeyState( "Shift","P" ))
            {
               Send {Alt Down}{Shift Down}{Tab}
               Sleep, 200
            }
            else
            {
               Send {Alt Down}{Tab}
               Sleep, 200
            }
         }
      }
   }

   Send {Alt Up} ; Close switcher on hotkey release

   for index, wid in tw
   {
      WinSet, ExStyle, ^0x80, ahk_id %wid%
   }

   for index, wid in aw
   {
      WinSet, ExStyle, ^0x40000, ahk_id %wid%
   }
}
return

AltTab_window_list(excludeToolWindows)
{
   global
   WS_EX_CONTROLPARENT =0x10000
   WS_EX_APPWINDOW =0x40000
   WS_EX_TOOLWINDOW =0x80
   WS_DISABLED =0x8000000
   WS_POPUP =0x80000000
   AltTab_ID_List_ =0
   WinGet, Window_List, List,,, Program Manager ; Gather a list of running programs
   id_list =
   Loop, %Window_List%
   {
      wid := Window_List%A_Index%
      WinGetTitle, wid_Title, ahk_id %wid%
      WinGet, Style, Style, ahk_id %wid%

      If ((Style & WS_DISABLED) or ! (wid_Title)) ; skip unimportant windows
         Continue

      WinGet, es, ExStyle, ahk_id %wid%
      Parent := Decimal_to_Hex( DllCall( "GetParent", "uint", wid ) )
      WinGetClass, Win_Class, ahk_id %wid%
      WinGet, Style_parent, Style, ahk_id %Parent%

      If ((excludeToolWindows & (es & WS_EX_TOOLWINDOW))
         or ((es & ws_ex_controlparent) and ! (Style & WS_POPUP) and !(Win_Class ="#32770") and ! (es & WS_EX_APPWINDOW)) ; pspad child window excluded
         or ((Style & WS_POPUP) and (Parent) and ((Style_parent & WS_DISABLED) =0))) ; notepad find window excluded ; note - some windows result in blank value so must test for zero instead of using NOT operator!
         continue
      AltTab_ID_List_ ++
      AltTab_ID_List_%AltTab_ID_List_% :=wid
   }  
   AltTab_ID_List_0 := AltTab_ID_List_
}


おっとっと; 編集内容が重複しています。ハンプティダンプティを再び組み立てようとしました。コードが意図したとおりのものであることを確認してください。
スコット

0

Autohotkeyを使用して、ChromeおよびElectronアプリで動作する私のバージョンを紹介します。@ user332861の回答から変更され、SlackやVisual Studio CodeなどのChromeアプリとElectronアプリを正しく区別できるようになりました。(それを行うには、ahk_exe代わりにを使用しますahk_class

!`::    ; Next window if using alt-backtick
    WinGet, ExeName, ProcessName , A
    WinGet, ExeCount, Count, ahk_exe %ExeName%
    If ExeCount = 1
        Return
    Else
        WinSet, Bottom,, A
        WinActivate, ahk_exe %ExeName%
return

!+`::    ; prev window, Alt+shift+backtick
    WinGet, ExeName, ProcessName , A
    WinActivateBottom, ahk_exe %ExeName%
return

0
!`::
#`::
WinGet, ExeName, ProcessName, A
WinActivateBottom, ahk_exe %ExeName%
return

@ otter.proの回答から簡略化。これは、単に現在のアプリケーションウィンドウを逆方向に循環します。前方に循環すると、他のウィンドウが短時間点滅することがあります。フラッシュが表示されないことは、おそらく双方向サイクリングよりも重要であるため、順方向にサイクルしないでください。さらに、この答えは、Macショートカットのキーの組み合わせであるため、! `の代替として#`を許可します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.