在虚拟桌面之间移动运行的应用

 苏小丫123_877 发布于 2023-02-13 10:47

我已经阅读了与虚拟桌面相关的堆栈溢出文章,下面是与虚拟桌面相关的链接,但它无法解决我的问题.

"如何在默认桌面和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显示真实值,但我的应用程序仍保留在旧桌面中,并且不会移动到新桌面.可能是因为我的应用程序没有从一个桌面移动到另一个桌面.我错过了什么.请帮忙...

谢谢和问候,阿舒

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有