Windows 10的虚拟桌面

简介

Windows 10发布后,Windows系统外壳终于内置了虚拟桌面功能。虽然该功能有些跟随Mac多重桌面的嫌疑,但它的确极大方便了桌面组织。

首先,本文将介绍一些使用虚拟桌面的快捷键。然后,讨论使用IVirtualDesktopManager接口,在C#里实现追随虚拟桌面的代码。最后,谈谈Windows 10虚拟桌面和Windows Desktop API的区别。

使用虚拟桌面的快捷键

新建桌面:Ctrl+Win + D
删除桌面:Ctrl+Win + F4
上个桌面:Ctrl+Win + <-
下个桌面:Ctrl+Win + ->

如果记不清快捷键也没关系,可以用Win+Tab还呼出桌面管理视图。或者,用鼠标点击任务栏上的“任务视图”图标:
任务视图图标
出现桌面管理视图后,用鼠标新建,删除,切换,以及移动窗口到其他桌面。
桌面管理视图

IVirtualDesktopManager接口

Windows SDK Support Team博客中,有一篇Chris Lewis1的文章《Virtual Desktop Switching in Windows 10》。它介绍了如何在C#里利用Windows Shell的VirtualDeskTopManager2,以及它的COM接口IVirtualDeskTopManager3来将当前窗口移动到活跃桌面的方法。这里给出简单的c#实现。

首先,在Visual Studio中新建一个WinForm项目,选用DotNet Framework4.0或以上都可以。
然后,在Form1.cs文件中,Form1类的后面,贴入如下COM调用声明:

    public partial class Form1 : Form
    {
   
        //...
    }

    [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("a5cd92ff-29be-454c-8d04-d82879fb3f1b")]
    [System.Security.SuppressUnmanagedCodeSecurity]
    public interface IVirtualDesktopManager
    {
   
        bool IsWindowOnCurrentVirtualDesktop([In] IntPtr TopLevelWindow);
        Guid GetWindowDesktopId([In] IntPtr TopLevelWindow);
        void MoveWindowToDesktop([In] IntPtr TopLevelWindow, ref Guid CurrentDesktop);
    }

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

接口和COM class的GUID可以在Shobjidl.h头文件中找到。
使用IVirtualDesktopManager接口,我们可以

  1. 判断是否当前窗口位于活动桌面上,
  2. 获取某个顶级窗口所在桌面的桌面标志,
  3. 将某个顶级窗口移动到目标桌面上。

在Form1的构造函数下,我们启用一个定时器。定时器每一秒将检查是否当前窗口位于活动桌面下。
如果用户切换到另外一个虚拟桌面,我们将尝试获取该活动虚拟桌面的标志,并将当前窗口移动到活动桌面下。

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsAp
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值