gpt4 book ai didi

windows-10 - Windows 10 IVirtualDesktopManager::MoveWindowToDesktop

转载 作者:行者123 更新时间:2023-12-04 19:03:01 35 4
gpt4 key购买 nike

我一直在尝试使用 IVirtualDesktopManager::MoveWindowToDesktop在虚拟桌面之间移动窗口。

在我自己的窗口上使用它效果很好,但不幸的是,当我尝试在另一个进程的窗口上使用它时,它会因 E_ACCESSDENIED 而失败。

可悲的是,“以管理员身份启动”还不够好。
我是否遗漏了一些我对 COM 接口(interface)一无所知的东西,或者它只是设计不当?

最佳答案

您可以移动不属于执行进程的窗口,但它需要使用其他未记录的 COM 对象。

  • 查询 IApplicationViewCollection 和 IVirtualDesktopManagerInternal 实例的 ImmersiveShell。
  • 获取要移动的窗口的 hwnd。
  • 听起来您已经知道目标桌面 ID,但您也可以使用 IVirtualDesktopManagerInternal 方法 GetAdjacentDesktop 和 GetDesktops 来查找更多信息。
  • 调用 IApplicationViewCollection::GetViewForHwnd 来获取 View 。
  • 调用 IVirtualDesktopManagerInternal::MoveViewToDesktop 移动 View 。

  • 代码引用:
  • VirtualDesktopAccessor在 C++ 中包装相关对象并构建您可以使用的 native DLL。
  • VirtualDesktop将它们包装在 C# 中并提供 .NET DLL 和 GUI。
  • zVirtualDesktop记录不同版本的接口(interface)。
  • This forum topic展示了如何使用 IVirtualDesktopManagerInternal 在 AutoHotKey 中按索引选择虚拟桌面。我正在开发一个包含 IApplicationViewCollection 以支持移动任何给定窗口的版本,如上所述。
  • 关于windows-10 - Windows 10 IVirtualDesktopManager::MoveWindowToDesktop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659505/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com