Windows 7中是否有快捷方式可仅在给定应用程序中的窗口之间切换?我非常喜欢OS X中的此功能;在Windows中相当于什么?
Windows 7中是否有快捷方式可仅在给定应用程序中的窗口之间切换?我非常喜欢OS X中的此功能;在Windows中相当于什么?
Answers:
如果它是任务栏上前十个应用程序之一,则 (Win)+ n(其中n是其位置编号)将选择它并在窗口中循环。(0对于第十个应用程序,请使用(零)。)例如,我将Windows资源管理器和Internet Explorer固定为任务栏上的前两件事,因此可以使用+ 1循环浏览目录和+ 2循环浏览器。
一些奇怪的注意事项:
如果您按住 并键入(和释放)数字n,则Windows将在任务栏上打开第 n个应用程序。n 如上所述,反复点击将在该程序的窗口中循环。如 TranslucentCloud所述,如果您输入Shift+ n,它将以相反的顺序循环通过它们,例如Alt+ Tab 和 Ctrl+ Tab等。
如果任务栏上的第n个应用程序已固定但未运行,则+ n将启动它。
在Windows 7和8中,尽管我没有快捷键可以单独通过键盘使用,但您可以按住鼠标,Ctrl同时单击感兴趣的应用程序的任务栏图标。每次执行此操作时,都会出现一个属于该应用程序的不同窗口来到最前沿。
另外,程序VistaSwitcher设置Win+ F11和Alt+ `在当前应用程序的窗口之间切换。(顺便说一句,它的网站说不支持Windows 8,但是在8.1以下我很幸运;到目前为止,我唯一看到的问题是它有时将诸如搜索边栏之类的东西列为打开的窗口。我只是忽略了那,但YMMV。)
alt-tab terminator
不再具有在同一应用程序之间
您可以使用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。很棒!
时代
WinGet, List
返回List
变量中的窗口数(与List%n%
存储句柄的伪数组相反),因此您可以跳过WinGet, WinClassCount
调用并进行检查List
。此外,两个热键的代码似乎相同。
谢谢,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
哦,我还更改了上一类,使用shift而不是ctrl,因为我是其他几个键盘快捷键的后退修饰符。我喜欢自动热键。
Neosmart的Easy Windows Switcher完全可以满足您的需求。
这是Easy Windows Switcher网站上的描述
Easy Window Switcher使切换不同的窗口alt+`像在Mac上一样容易(按alt + backtick)。
alt+tab
借助Easy Window Switcher,无需 在一百万个不同的打开的窗口之间找到所需的窗口,只需在同一程序的窗口之间切换即可alt+`。
VistaSwitcher允许或为此功能。它与Windows 10兼容(尽管名称另有说明)。在Windows 8及更高版本上,建议将某些Metro应用添加到排除列表中。
最佳答案是好的,但不适用于将任务栏设置为仅在活动监视器上显示图标的多监视器设置。
除了Scott(https://superuser.com/users/150988/scott)分享的内容之外:
ctrlrepeatedly click 任务栏上的应用程序图标上的+ 也可以完成任务。
同样使用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
我创建了一个AutoHotkey脚本,以在与常规Window Apps,Chrome Shortcuts和Chrome Apps一起使用的同一应用程序的窗口之间切换。
在该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/")
我创建了一个AutoHotkey脚本,该脚本与Windows Task Switcher(Alt+ Tab)很好地集成在一起,并提供了其所有优点:应用程序窗口的预览,单击选择,箭头键导航,仅激活所需的单个窗口。使用Alt+ `和Alt+ Shift+ `(反引号)调用/导航以在具有与当前窗口相同的进程名称的窗口之间循环。我发现它比Win+ 更有用,num因为它适用于任何应用程序(而不需要记住固定的插槽号),窗口预览更大,背景不会模糊,并且可以与Alt+ Tab导航无缝混合。在Windows 10上测试。
主要技巧是通过设置WS_EX_TOOLWINDOW
和取消设置从Task Switcher临时隐藏非目标应用程序窗口WS_EX_APPWINDOW
。为了在以管理员身份运行的Windows上设置这些Windows样式,需要对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_
}
这是我的版本,使用Autohotkey,可与Chrome和Electron应用程序一起使用。它是通过@ user332861的答案进行修改的,因此可以正确区分Chrome和Electron应用程序,例如Slack和Visual Studio Code。(为此,它使用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