【发布时间】:2014-01-06 05:05:15
【问题描述】:
我已经浏览过与虚拟桌面相关的堆栈溢出文章,下面是与虚拟桌面相关的链接,但它并没有解决我的问题。
“如何在默认桌面和 Winlogon 桌面之间切换进程?” How to switch a process between default desktop and Winlogon desktop?
“在 Windows 中的桌面之间移动应用程序” Moving applications between desktops in 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 也显示了真正的价值,但我的应用程序仍保留在旧桌面中并且不会移动到新桌面。我的应用程序没有从一个桌面移动到另一个桌面的原因可能是什么。我是不是错过了什么。请帮忙...
感谢和问候, 阿舒
【问题讨论】:
标签: c#