AutoHotKey - 在 Windows 10 中切换到下一个/上一个桌面的自定义快捷方式

AutoHotKey - 在 Windows 10 中切换到下一个/上一个桌面的自定义快捷方式

我编写了一个小型 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 

效果会很好:)

相关内容