Git Product home page Git Product logo

fupeijiang / vd.ahk Goto Github PK

View Code? Open in Web Editor NEW
324.0 11.0 45.0 228 KB

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

License: MIT License

AutoHotkey 100.00%
virtual-desktop autohotkey hotkeys windows winapi

vd.ahk's Introduction

VD.ahk: Virtual Desktop

Windows 11 support, Windows Server 2022, ahkv2: v2_port

Just run the examples, everything explained inside

  • Numpad1 to go to Desktop 1
  • Numpad2 to go to Desktop 2
  • Numpad3 to go to 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

  • Win + x move VSCode to your current Desktop and WinActivate
  • Win + e move "explorer replacement program" to your current Desktop and WinActivate
#x::VD.MoveWindowToCurrentDesktop("ahk_exe Code.exe ahk_class Chrome_WidgetWin_1")
#e::VD.MoveWindowToCurrentDesktop("ahk_explorer ahk_exe AutoHotkey.exe")

  • Numpad4 to move the active window to Desktop 1
  • Numpad5 to move the active window to Desktop 2
  • Numpad6 to move the active window to Desktop 3
  • here, I choose to follow the window
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 have
  • pretty much everything virtual desktop, or so I think!
    if there's anything missing/something you want: create an issue: I want to know what you're using it for

here'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

cool fixes:

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:
untitled

On desktop B I have Steam (note that Firefox is pinned to my task bar, which is why it's visible on this desktop):
untitled2

When I switch from A to B, Steam becomes highlighted:
untitled3 (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):
untitled4

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

  • Switch VD reliably works in FULLSCREEN thanks to SetTimer, pleaseSwitchDesktop, -50

if you don't use these headers, it will be slow:

#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:

  • MoveDesktop: // move current desktop to desktop in index (-> index = 0..Count-1)
  • SetDesktopName
  • SetDesktopWallpaper
  • GetDesktopIsPerMonitor
  • etc.
  • or anything else that's not On this list

create an issue saying what function(s) you need, what you'll be using it for (I'm curious)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.