【问题标题】:Moving running application between virtual desktop在虚拟桌面之间移动正在运行的应用程序
【发布时间】: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#


    【解决方案1】:

    根据您的描述,我假设您的应用程序在创建它的“原始”桌面上已经至少有一个窗口。 MSDN 告诉我们:

    如果调用线程有任何 SetThreadDesktop 函数将失败 当前桌面上的窗口或挂钩(除非 hDesktop 参数 是当前桌面的句柄)。

    但是你写的是 SetThreadDesktop 成功了。对此的唯一解释是您应用SetThreadDesktop 的线程没有任何钩子或窗口,因此不是您已显示 UI 的线程。

    很遗憾无法在 Windows 上将窗口从一个桌面移动到另一个桌面。您最多可以在特定桌面上创建窗口。

    您可能认为虚拟桌面管理器应用程序有一种解决方法。事实上,Windows 上的大多数这些应用程序仅模仿多桌面行为,但它们只是在Winsta0\default 桌面上显示/隐藏相应的窗口、任务栏、背景等。 SysInternals 的桌面应用程序是一个例外。但你猜怎么着,他们也面临同样的问题:

    桌面对 Windows 桌面对象的依赖意味着它不能 提供其他虚拟桌面实用程序的一些功能, 然而。例如,Windows 不提供移动窗口的方法 从一个桌面对象到另一个桌面对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2011-11-14
      • 1970-01-01
      相关资源
      最近更新 更多