Windows Virtual Desktop, AutoHotkey, Windows 11 support, Windows Server 2022, switch desktop, move window(wintitle) to current desktop; createDesktop, PinWindow, getCount, getDesktopNumOfWindow -> mute all windows in Virtual Desktop
Windows 11 support, Windows Server 2022, ahkv2: v2_port
Desktop 1
Desktop 2
Desktop 3
numpad1::VD.goToDesktopNum(1)
numpad2::VD.goToDesktopNum(2)
numpad3::VD.goToDesktopNum(3)
if you don't want VD switching animation, set VD.animation_on:=false
#x::VD.MoveWindowToCurrentDesktop("ahk_exe Code.exe ahk_class Chrome_WidgetWin_1")
#e::VD.MoveWindowToCurrentDesktop("ahk_explorer ahk_exe AutoHotkey.exe")
Desktop 1
Desktop 2
Desktop 3
numpad4::VD.MoveWindowToDesktopNum("A",1), VD.goToDesktopNum(1)
numpad5::VD.MoveWindowToDesktopNum("A",2), VD.goToDesktopNum(2)
numpad6::VD.MoveWindowToDesktopNum("A",3), VD.goToDesktopNum(3)
numpad7::VD.MoveWindowToDesktopNum("A",1)
numpad8::VD.MoveWindowToDesktopNum("A",2)
numpad9::VD.MoveWindowToDesktopNum("A",3)
...
; wrapping / cycle back to first desktop when at the last
^#left::VD.goToRelativeDesktopNum(-1)
^#right::VD.goToRelativeDesktopNum(+1)
; move window to left and follow it
#!left::VD.goToDesktopNum(VD.MoveWindowToRelativeDesktopNum("A", -1))
; move window to right and follow it
#!right::VD.goToDesktopNum(VD.MoveWindowToRelativeDesktopNum("A", 1))
you can remap everything
detect when the virtual desktop changes:
create a hotkey to return you to the previous desktop
#Include %A_LineFile%\..\VD.ahk
VD.RegisterDesktopNotifications()
VD.CurrentVirtualDesktopChanged:=Func("CurrentVirtualDesktopChanged")
VD.previous_desktopNum:=1
CurrentVirtualDesktopChanged(desktopNum_Old, desktopNum_New) {
VD.previous_desktopNum:=desktopNum_Old
}
Numpad0::VD.goToDesktopNum(VD.previous_desktopNum)
also has:
createDesktop()
rename desktop: VD.setNameToDesktopNum("custom Desktop Name",desktopNum)
PinWindow()
getCount()
;how many virtual desktops you now havehere's quick nice example: "get desktopNum of all windows"
#Include %A_LineFile%\..\..\VD.ahk
foundProcesses := ""
; Make sure to get all windows from all virtual desktops
DetectHiddenWindows On
WinGet, id, List
Loop %id%
{
hwnd := id%A_Index%
;VD.getDesktopNumOfWindow will filter out invalid windows
desktopNum_ := VD.getDesktopNumOfWindow("ahk_id" hwnd)
If (desktopNum_ > -1) ;-1 for invalid window, 0 for "Show on all desktops", 1 for Desktop 1
{
WinGet, exe, ProcessName, % "ahk_id" hwnd
foundProcesses .= desktopNum_ " " exe "`n"
}
}
MsgBox % foundProcesses
Sometimes when I switch desktop, the application that's focused on that desktop becomes highlighted in the task bar.
Example: On desktop A, I have Firefox:
On desktop B I have Steam (note that Firefox is pinned to my task bar, which is why it's visible on this desktop):
When I switch from A to B, Steam becomes highlighted:
(It's possible to stop the blinking by explicitly selecting the blinking window with the mouse or alt+tab.)When I switch back to A, Firefox also becomes highlighted (and Steam stays visible in the taskbar because it is highlighted):
This doesn't always happen; I'm not sure if it depends on the programs or where the mouse/keyboard focus is when switching desktops. That said, it happens far too often, to the point where it defeats the point of having multiple desktops at all.
(The problem isn't limited to Firefox and Steam, the same thing also happens with other programs like Explorer.)
how ? WinActivate
taskbar before switching and WinMinimize
taskbar after arriving
SetTimer, pleaseSwitchDesktop, -50
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance force
ListLines Off
SetBatchLines -1
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#KeyHistory 0
#WinActivateForce
Process, Priority,, H
SetWinDelay -1
SetControlDelay -1
if you want global functions style instead of a class:
eg: VD_goToDesktopNum()
instead of VD.goToDesktopNum()
then visit branch global_functions
but it won't be updated
from https://github.com/MScholtes/VirtualDesktop/blob/812c321e286b82a10f8050755c94d21c4b69812f/VirtualDesktop11.cs#L161-L185
Windows 11 has more functionality,
if you need:
// move current desktop to desktop in index (-> index = 0..Count-1)
create an issue saying what function(s) you need, what you'll be using it for (I'm curious)