我编写了一个小型 AutoHotKey 脚本来在 Windows 10 中切换虚拟桌面。我编写此代码是为了让我可以使用自己的自定义键盘快捷键切换桌面,而不是使用 Windows 10 的默认快捷键(WIN + CTRL + LEFT/RIGHT)。
代码:
#LAlt::^#Right ; switch to next desktop with Windows key + Left Alt key
#LCtrl::^#Left ; switch to next desktop with Windows key + Left CTRL key
此代码有效,但前提是您在按下按键之前单击窗口或当前桌面上的其他任何内容。我尝试使用 Click 函数在切换桌面之前模拟单击(有效),但它将鼠标移动到我单击的坐标,这显然不是我想要的。我尝试过 ControlClick,但从未让它工作过。
所以我的问题是:有没有办法在执行切换桌面的命令之前将焦点设置在当前桌面上?或者,有没有其他方法可以在不模拟默认 Win 10 快捷方式的情况下切换桌面?
谢谢!
编辑1
我注意到的一件事是,如果我单击任务栏,然后执行LWin+ LAlt/ ,我可以通过按住并交替和来LCtrl顺利地来回切换。LWinLAltLCtrl
当我单击任务栏然后执行LWin+LAlt时,KeyHistory 会输出以下内容:
VK SC Type Up/Dn Elapsed Key Window
----------------------------------------------
5B 15B d 1.91 LWin
A4 038 h d 0.31 LAlt
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
A4 038 i u 0.00 LAlt
A2 01D i d 0.05 LControl
5B 15B i d 0.02 LWin
27 14D i d 0.02 Right
27 14D i u 0.00 Right
A2 01D i u 0.01 LControl
5B 15B i u 0.02 LWin
A2 01D i d 0.01 LControl
5B 15B i d 0.00 LWin
A2 01D i u 0.00 LControl
A4 038 s u 0.00 LAlt
5B 15B u 0.06 LWin
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
(This is what I want it to do without clicking the taskbar)
但是当我刚刚按下LWin+时LAlt,KeyHistory 显示按键事件在“右上”事件后停止:
VK SC Type Up/Dn Elapsed Key Window
----------------------------------------------
5B 15B d 1.91 LWin
A4 038 h d 0.31 LAlt
A2 01D i d 0.00 LControl
A2 01D i u 0.00 LControl
A4 038 i u 0.00 LAlt
A2 01D i d 0.05 LControl
5B 15B i d 0.02 LWin
27 14D i d 0.02 Right
27 14D i u 0.00 Right
(There should be more after this)
LControl Up 事件从未被触发,这似乎把一切都搞砸了。
答案1
有时当您尝试发送修饰键(win/ctrl/alt)并且触发字符串也有修饰键时,您需要等待触发键被释放,否则它们会影响您发现的替换字符串。
尝试使用KeyWait
来实现这一点。请注意,我们现在使用的是热键语法,而不是热字符串。
#LAlt:: ; switch to next desktop with Windows key + Left Alt key
KeyWait LAlt
SendInput #^{Right}
Return
#LCtrl:: ; switch to previous desktop with Windows key + Left CTRL key
KeyWait LCtrl
SendInput #^{Left}
Return
为了切换桌面,上述方法对我有用。
在其他情况下,有时即使这种方法也不起作用,还有另一种可能的解决方案。而不是像这样的关键等待......
KeyWait LAlt
KeyWait LCtrl
...用以下相应的按键替换以清除按键的状态:
Send,{LAlt Down}{LAlt Up}
Send,{LCtrl Down}{LCtrl Up}
答案2
除非我遗漏了某个要点,否则 Windows ++ / 箭头不是可以ctrl切换←桌面→吗?至少在我的电脑上是这样的。
答案3
不知道它是否仍然有用,但 Reddit 上的“pzone”编写了一个脚本,该脚本使用一个带有全局变量的函数来记住您在哪个桌面上,这样您就可以绑定一个热键来在两个桌面之间切换。只有当您有 2 个桌面时它才会起作用。
switchedDesktop := false
switchDesktop()
{
global switchedDesktop
if switchedDesktop
{
SendEvent ^#{Right}
switchedDesktop := false
}
else
{
SendEvent ^#{Left}
switchedDesktop := true
}
}
https://www.reddit.com/r/AutoHotkey/comments/3fyudo/automatically_switch_between_windows_10_virtual
答案4
例如,我想将 Page Down 设置为下一个桌面,将 Page Up 设置为上一个桌面。安装 AutoHotkey 后,我创建一个新的 AutoHotKey 脚本并将这些代码添加到其中,然后保存并运行脚本
PgDn::^#Right ;Next Desktop
return
PgUp::^#Left ;Previous Desktop
return
效果会很好:)