It combines the explorers in different desktops, but I want it to work independently on both.
OS:Windows10
I've got an idea for this, but it isn't very easy and may take more time.
Meanwhile, you can drag any tab out of the group so it stays on the virtual desktop. Will this alternative method work for you?
For reference later.
How WindowTabs adds a window to a group: https://github.com/leafOfTree/WindowTabs/blob/859aed584a11e76a987032ac603a4af46c90b45e/WtProgram/Program.fs#L197
There is an interface for virtual desktop:
interface IVirtualDesktopManager: https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ivirtualdesktopmanager?redirectedfrom=MSDN
method GetWindowDesktopId: https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ivirtualdesktopmanager-getwindowdesktopid
We can use GetWindowDesktopId to group tabs for each desktop.
An example
open System
open System.Runtime.InteropServices
[<ComImport; Guid("A5CD92FF-29BE-454C-8D04-D82879FB3F1B"); InterfaceType(ComInterfaceType.InterfaceIsIUnknown)>]
type IVirtualDesktopManager =
abstract member IsWindowOnCurrentVirtualDesktop: IntPtr * byref<bool> -> int
abstract member GetWindowDesktopId: IntPtr * byref<Guid> -> int
abstract member MoveWindowToDesktop: IntPtr * byref<Guid> -> int
let getWindowDesktopId (windowHandle: IntPtr) =
// Create an instance of IVirtualDesktopManager
let clsid = new Guid("C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B")
let vdmType = Type.GetTypeFromCLSID(clsid)
let vdm = Activator.CreateInstance(vdmType) :?> IVirtualDesktopManager
// Get the desktop ID
let mutable desktopId = Guid.Empty
let hr = vdm.GetWindowDesktopId(windowHandle, &desktopId)
if hr = 0 then
printfn "Window is on Desktop ID: %A" desktopId
else
printfn "Failed to get Desktop ID. HRESULT: %d" hr
// Example window handle (replace with actual handle)
let windowHandle = IntPtr.Zero
getWindowDesktopId windowHandle