Esta é apenas uma ideia para algo tentar e adaptar ... não testado.
Desde que o script esteja sendo executado, ele apenas salva a área de trabalho virtual ativa em uma variável, não precisa necessariamente de um arquivo ini.
O script precisa ser iniciado com a área de trabalho virtual nº 1 ativa ou precisa forçar uma sincronização. A função forçar assume que você pode pressionar ctrl + win + left quantas vezes quiser e não passará do primeiro desktop virtual quando chegar lá.
As teclas de atalho acionam as teclas padrão do Windows, mas não as capturam (por exemplo, til ~ permite que o pressionamento de tecla seja executado). Portanto, ele rastrearia o teclado se você estivesse usando o teclado e, se estivesse usando o mouse, poderia atribuir o mouse a uma tecla de atalho ou outra.
Você também pode adicionar um atalho duplicado personalizado para uma ou ambas as direções ... mostrando isso como ctrl + alt + F8, por exemplo, caso o botão do mouse precise ser atribuído a algo diferente das teclas padrão do windows para alternar entre desktops.
#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