Skip to content
View hoangbau's full-sized avatar
  • Ha Noi
  • 06:16 (UTC +07:00)

Block or report hoangbau

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
hoangbau/README.md

; Globals DesktopCount = 2 ; Windows starts with 2 desktops at boot CurrentDesktop = 1 ; Desktop count is 1-indexed (Microsoft numbers them this way) ; ; This function examines the registry to build an accurate list of the current virtual desktops and which one we're currently on. ; Current desktop UUID appears to be in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\1\VirtualDesktops ; List of desktops appears to be in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops ; mapDesktopsFromRegistry() { global CurrentDesktop, DesktopCount ; Get the current desktop UUID. Length should be 32 always, but there's no guarantee this couldn't change in a later Windows release so we check. IdLength := 32 SessionId := getSessionId() if (SessionId) { RegRead, CurrentDesktopId, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo%SessionId%\VirtualDesktops, CurrentVirtualDesktop if (CurrentDesktopId) { IdLength := StrLen(CurrentDesktopId) } } ; Get a list of the UUIDs for all virtual desktops on the system RegRead, DesktopList, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops, VirtualDesktopIDs if (DesktopList) { DesktopListLength := StrLen(DesktopList) ; Figure out how many virtual desktops there are DesktopCount := DesktopListLength / IdLength } else { DesktopCount := 1 } ; Parse the REG_DATA string that stores the array of UUID's for virtual desktops in the registry. i := 0 while (CurrentDesktopId and i < DesktopCount) { StartPos := (i * IdLength) + 1 DesktopIter := SubStr(DesktopList, StartPos, IdLength) OutputDebug, The iterator is pointing at %DesktopIter% and count is %i%. ; Break out if we find a match in the list. If we didn't find anything, keep the ; old guess and pray we're still correct :-D. if (DesktopIter = CurrentDesktopId) { CurrentDesktop := i + 1 OutputDebug, Current desktop number is %CurrentDesktop% with an ID of %DesktopIter%. break } i++ } } ; ; This functions finds out ID of current session. ; getSessionId() { ProcessId := DllCall("GetCurrentProcessId", "UInt") if ErrorLevel { OutputDebug, Error getting current process id: %ErrorLevel% return } OutputDebug, Current Process Id: %ProcessId% DllCall("ProcessIdToSessionId", "UInt", ProcessId, "UInt*", SessionId) if ErrorLevel { OutputDebug, Error getting session id: %ErrorLevel% return } OutputDebug, Current Session Id: %SessionId% return SessionId } ; ; This function switches to the desktop number provided. ; switchDesktopByNumber(targetDesktop) { global CurrentDesktop, DesktopCount ; Re-generate the list of desktops and where we fit in that. We do this because ; the user may have switched desktops via some other means than the script. mapDesktopsFromRegistry() ; Don't attempt to switch to an invalid desktop if (targetDesktop > DesktopCount || targetDesktop < 1) { OutputDebug, [invalid] target: %targetDesktop% current: %CurrentDesktop% return } ; Go right until we reach the desktop we want while(CurrentDesktop < targetDesktop) { Send ^#{Right} CurrentDesktop++ OutputDebug, [right] target: %targetDesktop% current: %CurrentDesktop% } ; Go left until we reach the desktop we want while(CurrentDesktop > targetDesktop) { Send ^#{Left} CurrentDesktop-- OutputDebug, [left] target: %targetDesktop% current: %CurrentDesktop% } } ; ; This function creates a new virtual desktop and switches to it ; createVirtualDesktop() { global CurrentDesktop, DesktopCount Send, #^d DesktopCount++ CurrentDesktop = %DesktopCount% OutputDebug, [create] desktops: %DesktopCount% current: %CurrentDesktop% } ; ; This function deletes the current virtual desktop ; deleteVirtualDesktop() { global CurrentDesktop, DesktopCount Send, #^{F4} DesktopCount-- CurrentDesktop-- OutputDebug, [delete] desktops: %DesktopCount% current: %CurrentDesktop% } ; Main SetKeyDelay, 75 mapDesktopsFromRegistry() OutputDebug, [loading] desktops: %DesktopCount% current: %CurrentDesktop% ; User config! ; This section binds the key combo to the switch/create/delete actions LWin & 1::switchDesktopByNumber(1) LWin & 2::switchDesktopByNumber(2) LWin & 3::switchDesktopByNumber(3) LWin & 4::switchDesktopByNumber(4) LWin & 5::switchDesktopByNumber(5) LWin & 6::switchDesktopByNumber(6) LWin & 7::switchDesktopByNumber(7) LWin & 8::switchDesktopByNumber(8) LWin & 9::switchDesktopByNumber(9) ;CapsLock & 1::switchDesktopByNumber(1) ;CapsLock & 2::switchDesktopByNumber(2) ;CapsLock & 3::switchDesktopByNumber(3) ;CapsLock & 4::switchDesktopByNumber(4) ;CapsLock & 5::switchDesktopByNumber(5) ;CapsLock & 6::switchDesktopByNumber(6) ;CapsLock & 7::switchDesktopByNumber(7) ;CapsLock & 8::switchDesktopByNumber(8) ;CapsLock & 9::switchDesktopByNumber(9) ;CapsLock & n::switchDesktopByNumber(CurrentDesktop + 1) ;CapsLock & p::switchDesktopByNumber(CurrentDesktop - 1) ;CapsLock & s::switchDesktopByNumber(CurrentDesktop + 1) ;CapsLock & a::switchDesktopByNumber(CurrentDesktop - 1) ;CapsLock & c::createVirtualDesktop() ;CapsLock & d::deleteVirtualDesktop() ; Alternate keys for this config. Adding these because DragonFly (python) doesn't send CapsLock correctly. ;^!1::switchDesktopByNumber(1) ;^!2::switchDesktopByNumber(2) ;^!3::switchDesktopByNumber(3) ;^!4::switchDesktopByNumber(4) ;^!5::switchDesktopByNumber(5) ;^!6::switchDesktopByNumber(6) ;^!7::switchDesktopByNumber(7) ;^!8::switchDesktopByNumber(8) ;^!9::switchDesktopByNumber(9) ;^!n::switchDesktopByNumber(CurrentDesktop + 1) ;^!p::switchDesktopByNumber(CurrentDesktop - 1) ;^!s::switchDesktopByNumber(CurrentDesktop + 1) ;^!a::switchDesktopByNumber(CurrentDesktop - 1) ;^!c::createVirtualDesktop() ;^!d::deleteVirtualDesktop()

Pinned Loading

  1. NetCoreCRUDWithMongo NetCoreCRUDWithMongo Public

    C# 1

  2. hoangbau hoangbau Public

    2