autohotkey如何检测您使用的虚拟桌面';你在吗?
嗨,我对自动热键(以及一般的编程)不熟悉,我想写一个脚本,让我可以方便地切换到特定的桌面。例如,在我的脚本中,Capslock+3切换到desktop 3 正如你所看到的,或者如果你尝试一下,它不是很健壮。该脚本只知道一个与真实数字不同的桌面数字。例如,如果在桌面4上运行脚本,则脚本仍以桌面设置为1开始,您必须先按Caps+4,然后按Caps+1以将其设置为正确方向。如果在另一个桌面上有一个闪烁的窗口,你点击它,它就会切换到该桌面,而脚本仍然认为你在上一个桌面上 我已经搜索了autohotkey可以检测您在哪个桌面上的方法,但找不到任何方法 有谁能给我一些建议来改进它吗?谢谢Dautohotkey如何检测您使用的虚拟桌面';你在吗?,autohotkey,desktop,Autohotkey,Desktop,嗨,我对自动热键(以及一般的编程)不熟悉,我想写一个脚本,让我可以方便地切换到特定的桌面。例如,在我的脚本中,Capslock+3切换到desktop 3 正如你所看到的,或者如果你尝试一下,它不是很健壮。该脚本只知道一个与真实数字不同的桌面数字。例如,如果在桌面4上运行脚本,则脚本仍以桌面设置为1开始,您必须先按Caps+4,然后按Caps+1以将其设置为正确方向。如果在另一个桌面上有一个闪烁的窗口,你点击它,它就会切换到该桌面,而脚本仍然认为你在上一个桌面上 我已经搜索了autohotkey
SetCapsLockState, AlwaysOff
desktop = 1
Switch(d)
{
global
;Determine how far away the desired desktop is from current one
press := (d-desktop)
desktop = %d%
;Determine which direction to switch desktops and stop script if already on current desktop
If press < 0
direction = Left
else if press > 0
direction = Right
else
return
press := Abs(press)
Loop, %press%
{
SendInput, ^#{%direction%}
Sleep, 75
}
return
}
CapsLock & 1::
Switch(1)
return
CapsLock & 2::
Switch(2)
return
CapsLock & 3::
Switch(3)
return
CapsLock & 4::
Switch(4)
return
;In case user switches desktop with traditional shortcuts
^#Left::
SendInput ^#{Left}
If desktop > 1
desktop--
return
^#Right::
SendInput ^#{Right}
If desktop < 4
desktop++
return
SetCapsLockState,AlwaysOff
桌面=1
开关(d)
{
全球的
;确定所需桌面与当前桌面的距离
按:=(d-桌面)
桌面=%d%
;确定切换桌面的方向,并停止脚本(如果已在当前桌面上)
如果按<0
方向=左
否则,如果按>0
方向=右
其他的
返回
压力:=Abs(压力)
循环,%press%
{
SendInput,^#{%direction%}
睡觉,75
}
返回
}
CapsLock&1::
开关(1)
返回
CapsLock&2::
开关(2)
返回
CapsLock&3::
开关(3)
返回
CapsLock&4::
开关(4)
返回
;如果用户使用传统快捷方式切换桌面
^#左::
SendInput^{Left}
如果桌面>1
桌面--
返回
^#右::
SendInput^{Right}
如果桌面<4
桌面++
返回
例如,如果您需要继续使用您的实用程序,并且无法使用VirtualWin,那么我不会尝试创建“感知”脚本来“检测”当前桌面。我会根据您用来切换桌面的热键,将当前桌面存储在一个变量中,就像您一直在尝试的那样
我认为问题在于你的左右两边都支持传统的捷径。如果有办法禁用这些快捷方式,您将有一个更简单、更健壮的脚本需要维护。
我制作了一个ahk函数库,
- Numpad1转到桌面1
- Numpad2转到桌面2
- Numpad3转到桌面3
它是
VD\u getCurrentDesktop()
运行“VD examples.ahk”以使用库您需要进一步澄清您的问题。您发现哪些问题被归类为不可靠?你曾试图解决你所关心的问题吗?您也可以查看此链接以改进您的问题,@JosephK。更改了标题并添加了一些说明。谢谢试试看,我用VirtualWin。是的,如果您以管理员身份运行,它可以在Windows 10上工作。这在某个阶段工作,但在重新启动会话移动到会话\5后停止,然后每次更改注册表路径时都必须继续编辑脚本。此答案需要更多解释。
RegRead, cur, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\1\VirtualDesktops, CurrentVirtualDesktop
RegRead, all, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops, VirtualDesktopIDs
ix := floor(InStr(all,cur) / strlen(cur))
msgbox current desktop index: %ix%