autohotkey如何检测您使用的虚拟桌面';你在吗?

autohotkey如何检测您使用的虚拟桌面';你在吗?,autohotkey,desktop,Autohotkey,Desktop,嗨,我对自动热键(以及一般的编程)不熟悉,我想写一个脚本,让我可以方便地切换到特定的桌面。例如,在我的脚本中,Capslock+3切换到desktop 3 正如你所看到的,或者如果你尝试一下,它不是很健壮。该脚本只知道一个与真实数字不同的桌面数字。例如,如果在桌面4上运行脚本,则脚本仍以桌面设置为1开始,您必须先按Caps+4,然后按Caps+1以将其设置为正确方向。如果在另一个桌面上有一个闪烁的窗口,你点击它,它就会切换到该桌面,而脚本仍然认为你在上一个桌面上 我已经搜索了autohotkey

嗨,我对自动热键(以及一般的编程)不熟悉,我想写一个脚本,让我可以方便地切换到特定的桌面。例如,在我的脚本中,Capslock+3切换到desktop 3

正如你所看到的,或者如果你尝试一下,它不是很健壮。该脚本只知道一个与真实数字不同的桌面数字。例如,如果在桌面4上运行脚本,则脚本仍以桌面设置为1开始,您必须先按Caps+4,然后按Caps+1以将其设置为正确方向。如果在另一个桌面上有一个闪烁的窗口,你点击它,它就会切换到该桌面,而脚本仍然认为你在上一个桌面上

我已经搜索了autohotkey可以检测您在哪个桌面上的方法,但找不到任何方法

有谁能给我一些建议来改进它吗?谢谢D

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%