gpt4 book ai didi

c# - Windows 10 中虚拟桌面的编程控制

转载 作者:可可西里 更新时间:2023-11-01 12:44:31 32 4
gpt4 key购买 nike

我喜欢 Windows 10 现在支持内置的虚拟桌面,但我有一些我想添加/修改的功能(例如,强制一个窗口出现在所有桌面上,使用热键启动任务 View ,有每个显示器的桌面等)

我已经搜索了应用程序和开发人员引用资料来帮助我自定义我的桌面,但我没有找到任何运气。

我应该从哪里开始?我正在寻找 Windows API 函数(理想情况下,可以从 C# 应用程序调用),这些函数可以让我以编程方式访问虚拟桌面和其中的窗口。

最佳答案

Windows SDK Support Team Blog发布了 C# demo to switch Desktops通过 IVirtualDesktopManager:

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("a5cd92ff-29be-454c-8d04-d82879fb3f1b")]
[System.Security.SuppressUnmanagedCodeSecurity]
public interface IVirtualDesktopManager
{
[PreserveSig]
int IsWindowOnCurrentVirtualDesktop(
[In] IntPtr TopLevelWindow,
[Out] out int OnCurrentDesktop
);
[PreserveSig]
int GetWindowDesktopId(
[In] IntPtr TopLevelWindow,
[Out] out Guid CurrentDesktop
);

[PreserveSig]
int MoveWindowToDesktop(
[In] IntPtr TopLevelWindow,
[MarshalAs(UnmanagedType.LPStruct)]
[In]Guid CurrentDesktop
);
}

[ComImport, Guid("aa509086-5ca9-4c25-8f95-589d3c07b48a")]
public class CVirtualDesktopManager
{

}
public class VirtualDesktopManager
{
public VirtualDesktopManager()
{
cmanager = new CVirtualDesktopManager();
manager = (IVirtualDesktopManager)cmanager;
}
~VirtualDesktopManager()
{
manager = null;
cmanager = null;
}
private CVirtualDesktopManager cmanager = null;
private IVirtualDesktopManager manager;

public bool IsWindowOnCurrentVirtualDesktop(IntPtr TopLevelWindow)
{
int result;
int hr;
if ((hr = manager.IsWindowOnCurrentVirtualDesktop(TopLevelWindow, out result)) != 0)
{
Marshal.ThrowExceptionForHR(hr);
}
return result != 0;
}

public Guid GetWindowDesktopId(IntPtr TopLevelWindow)
{
Guid result;
int hr;
if ((hr = manager.GetWindowDesktopId(TopLevelWindow, out result)) != 0)
{
Marshal.ThrowExceptionForHR(hr);
}
return result;
}

public void MoveWindowToDesktop(IntPtr TopLevelWindow, Guid CurrentDesktop)
{
int hr;
if ((hr = manager.MoveWindowToDesktop(TopLevelWindow, CurrentDesktop)) != 0)
{
Marshal.ThrowExceptionForHR(hr);
}
}
}

它包含用于检测窗口显示在哪个桌面上的 API,它可以切换和移动 Windows 到桌面。

关于c# - Windows 10 中虚拟桌面的编程控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32416843/

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