假设我有三个虚拟桌面。我知道我可以使用以下方式浏览它们:
ctrl + windows + left | right
但是,如果我到达末尾,有没有办法让它循环回到开头?这样,如果我在桌面 3 上,“ctrl + windows + right”会带我到桌面 1?
我知道使用 AutoHotkey 脚本可以实现这一点。但我不知道如何实现它。
我之所以需要这样工作,是因为我打算将此功能映射到我刚买的鼠标上(它有额外的按钮)。目前我需要使用两个按钮,这样我就可以在桌面之间来回移动。我宁愿只需要一个按钮。
谢谢
答案1
这只是一个尝试和适应的想法...尚未测试过。
只要脚本正在运行,它只会将活动虚拟桌面保存在变量中,并不一定需要 ini 文件。
该脚本要么必须在虚拟桌面 #1 处于活动状态时启动,要么必须强制同步。强制功能假定您可以按 ctrl+win+left 任意多次,并且一旦到达第一个虚拟桌面,它就不会循环超过该虚拟桌面。
快捷键在默认 Windows 键上触发,但不会捕获它们(即波浪号 ~ 允许按键通过)。因此,如果您使用键盘,它会跟踪键盘;如果您使用鼠标,您可以将鼠标分配给一个或另一个快捷键。
您还可以为一个或两个方向添加自定义重复的快捷方式...将其显示为 ctrl+alt+F8,例如,以防您的鼠标按钮需要分配给除默认 Windows 键之外的其他键来在桌面之间切换。
#NoEnv
#Persistent
numDesktops := 3 ; set to match number of virtual desktops
if forceSyncAtStartup := True ; set to False to disable sync on startup
SendInput % "^#{Left" (numDesktops-1) "}"
vDesktop := 1 ; this must match the virtual desktop active when program starts if a sync isn't forced
return
^!F8:: ; random/custom shortcut for the mouse if desired
~^#Left::
vDesktop -= 1
if (vDesktop=0) {
vDesktop := numDesktops
sleep 20 ; optional for better reliability
; use this if no delay needed for reliable operation
SendInput % "^#{Right " (numDesktops-1) "}
; use this type of setup if a delay is needed
; Loop, % (numDesktops-1) {
; SendInput ^#{Right}
; sleep 100 ; adjust for reliability
; }
}
return
~^#Right::
vDesktop += 1
sleep 20
if (vDesktop=(numDesktops+1)) {
vDesktop := 1
SendInput % "^#{Left" (numDesktops-1) "}"
}
return
答案2
另一个选择是使用Finestra 虚拟桌面默认情况下执行此循环并且热键是可配置的。