I've been trying to use IVirtualDesktopManager::MoveWindowToDesktop to move windows between virtual desktops.
Using it on my own windows works great but unfortunately it fails with E_ACCESSDENIED when I try to use it on the window of another process.
Sadly "Launch as admin" is not good enough for it. Am I missing something that I don't know about COM interfaces or is it just badly designed ?
You can move a window not owned by the executing process, but it requires the use of additional, undocumented COM objects.
Code references: