Skip to content

Commit

Permalink
fix: virtual desktop with win11
Browse files Browse the repository at this point in the history
  • Loading branch information
snomiao committed Jan 20, 2022
1 parent e33b989 commit bffab64
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 18 deletions.
38 changes: 26 additions & 12 deletions Modules/03-VirtualDesktop.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -236,9 +236,9 @@ SwitchToDesktop(idx)
if (SwitchToDesktopByInternalAPI(idx)) {
; ok
} else if (SwitchToDesktopByHotkey(idx)){
TrayTip, WARN, SwitchToDesktopByHotkey %idx%
Tooltip, WARN SwitchToDesktopByHotkey %idx%
} else {
TrayTip, WARN, SwitchToDeskto FAILED
Tooltip, WARN SwitchToDesktop FAILED
}
return idx
}
Expand Down Expand Up @@ -277,14 +277,16 @@ IsWindowOnCurrentVirtualDesktop(hWnd)
ObjRelease(IVirtualDesktopManager)
Return %bool%
}

SwitchToDesktopByInternalAPI(idx)
{
succ := 0
IServiceProvider := ComObjCreate("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{6D5140C1-7436-11CE-8034-00AA006009FA}")
IVirtualDesktopManagerInternal_Win10 := ComObjQuery(IServiceProvider, "{C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B}", "{F31574D6-B682-4CDC-BD56-1827860ABEC6}")
IVirtualDesktopManagerInternal_Win11 := ComObjQuery(IServiceProvider, "{C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B}", "{B2F925B9-5A0F-4D2E-9F4D-2B1507593C10}")
IVirtualDesktopManagerInternal := IVirtualDesktopManagerInternal_Win11 ? IVirtualDesktopManagerInternal_Win11 : IVirtualDesktopManagerInternal_Win10
IVirtualDesktopManagerInternal_Win10 := ComObjQuery(IServiceProvider, "{C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B}", "{F31574D6-B682-4CDC-BD56-1827860ABEC6}")
win11 := !!IVirtualDesktopManagerInternal_Win11
win10 := !!IVirtualDesktopManagerInternal_Win10
IVirtualDesktopManagerInternal := !!IVirtualDesktopManagerInternal_Win11 ? IVirtualDesktopManagerInternal_Win11 : IVirtualDesktopManagerInternal_Win10
; tooltip win %win11% %win10%
ObjRelease(IServiceProvider)
if (IVirtualDesktopManagerInternal) {
; tooltip %idx%
Expand All @@ -293,27 +295,39 @@ SwitchToDesktopByInternalAPI(idx)
SwitchDesktop := vtable(IVirtualDesktopManagerInternal, 9)
; TrayTip, , % IVirtualDesktopManagerInternal
pDesktopIObjectArray := 0
DllCall(GetDesktops, "Ptr", IVirtualDesktopManagerInternal, "Ptr*", pDesktopIObjectArray)
_ := win10 && DllCall(GetDesktops, "Ptr", IVirtualDesktopManagerInternal, "Ptr*", pDesktopIObjectArray)
_ := win11 && DllCall(GetDesktops, "Ptr", IVirtualDesktopManagerInternal, "Ptr", 0, "Ptr*", pDesktopIObjectArray)
; Tooltip %pDesktopIObjectArray%
if (pDesktopIObjectArray) {
GetDesktopCount := vtable(pDesktopIObjectArray, 3)
GetDesktopAt := vtable(pDesktopIObjectArray, 4)
DllCall(GetDesktopCount, "Ptr", IVirtualDesktopManagerInternal, "UInt*", DesktopCount)
; tooltip %DesktopCount%
_ := win10 && DllCall(GetDesktopCount, "Ptr", IVirtualDesktopManagerInternal, "UInt*", DesktopCount)
_ := win11 && DllCall(GetDesktopCount, "Ptr", IVirtualDesktopManagerInternal, "Ptr", 0, "UInt*", DesktopCount)
; tooltip 切换到桌面 %idx% / %DesktopCount%
; if idx-th desktop doesn't exists then create a new desktop
if (idx > DesktopCount) {
diff := idx - DesktopCount
loop %diff% {
SendEvent ^#d
}
succ := 1
}
GetGUIDFromString(IID_IVirtualDesktop, "{FF72FFDD-BE7E-43FC-9C03-AD81681E88E4}")
; if desktop count is more than 10 then delete them
if (DesktopCount > 10){
delCount := DesktopCount - 10 + 1
SendEvent ^#d
loop %delCount% {
SendEvent ^#{F4}
}
}
_ := win10 && GetGUIDFromString(IID_IVirtualDesktop, "{FF72FFDD-BE7E-43FC-9C03-AD81681E88E4}")
_ := win11 && GetGUIDFromString(IID_IVirtualDesktop, "{536D3495-B208-4CC9-AE26-DE8111275BF8}")
DllCall(GetDesktopAt, "Ptr", pDesktopIObjectArray, "UInt", idx - 1, "Ptr", &IID_IVirtualDesktop, "Ptr*", VirtualDesktop)
ObjRelease(pDesktopIObjectArray)
if (VirtualDesktop) {
DllCall(SwitchDesktop, "Ptr", IVirtualDesktopManagerInternal, "Ptr", VirtualDesktop)
_ := win10 && DllCall(SwitchDesktop, "Ptr", IVirtualDesktopManagerInternal, "Ptr", VirtualDesktop)
_ := win11 && DllCall(SwitchDesktop, "Ptr", IVirtualDesktopManagerInternal, "Ptr", 0, "Ptr", VirtualDesktop)
ObjRelease(VirtualDesktop)
succ := 1
succ := idx
}
}
ObjRelease(IVirtualDesktopManagerInternal)
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,8 @@
"start": "CapsLockX.exe",
"test": "CapsLockX.exe CapsLockX.ahk /CI_TEST",
"build": "npm upgrade && npm run test",
"build+patch": "npm run build && npm version patch",
"build+minor": "npm run build && npm version minor",
"build+major": "npm run build && npm version major",
"version": "npm run version:sync && npm run version:changelog",
"version:sync": "node DevTools/versioning.node.mjs && git add .",
"version:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md",
"postversion": "git push --follow-tag --all",
"prepare": "husky install",
"release": "standard-version"
Expand Down

0 comments on commit bffab64

Please sign in to comment.