我已经阅读了与虚拟桌面相关的堆栈溢出文章,下面是与虚拟桌面相关的链接,但它无法解决我的问题.
"如何在默认桌面和Winlogon桌面之间切换进程?" 如何在默认桌面和Winlogon桌面之间切换进程?
"在Windows中的桌面之间移动应用程序" 在Windows中的桌面之间移动应用程序
我在一个桌面上运行WPF应用程序,当我切换到该桌面时,我想将该应用程序移动到另一个桌面.我已经应用了下面提到的文章中提到的代码.
{码}
Debug.Write("MoveTONewDesktop ........"); IntPtr hWinSta0 = OpenWindowStation("WinSta0", false, ACCESS_MASK.MAXIMUM_ALLOWED); Debug.Write("Windows Station Pointer "+ hWinSta0.ToInt32()); if (null == hWinSta0) { } hWinSta0 = SetProcessWindowStation(hWinSta0); Debug.Write("SetProcessWindowStation " + hWinSta0.ToInt32()); IntPtr hDesk = OpenDesktop("ABCD", 0, false, ACCESS_MASK.MAXIMUM_ALLOWED); Debug.Write("OpenDesktop " + hDesk.ToInt32()); if (null == hDesk) { } bool result = SwitchDesktop(hDesk); Debug.Write("SwitchDesktop " + result); bool bSuccess = SetThreadDesktop(hDesk); Debug.Write("SetThreadDesktop " + bSuccess); if (!bSuccess) { Debug.Write("Get Last WIn32 Error " + Marshal.GetLastWin32Error()); System.Console.WriteLine(Marshal.GetLastWin32Error()); } if (hDesk != null) { CloseDesktop(hDesk); } if (hWinSta0 != null) { CloseWindowStation(hWinSta0); }
在调试时,我看到正确的句柄被打印,我的桌面被切换.此外,setThreadDesktop显示真实值,但我的应用程序仍保留在旧桌面中,并且不会移动到新桌面.可能是因为我的应用程序没有从一个桌面移动到另一个桌面.我错过了什么.请帮忙...
谢谢和问候,阿舒