网上有不少用其他语言实现虚拟桌面的例子,但是用C#实现的倒是比较少,所以就封装了一个VirtualDesktop类,可以很方便的实现虚拟桌面。
实现虚拟桌面,主要是利用CreateDesktop、OpenDesktop和 SwitchDesktop这几个API函数,如果想在打开的桌面上运行程序的话还需要的就是CreateProcess函数,这些API函数的具体介绍可以到MSDN上查看,在程序中,这些API的封装都放在NativeMethods类中。
VirtualDesktop类都已经把重要的方法实现了,包括创建新和打开新桌面、切换到新桌面、关闭新桌面和在新桌面中运行程序,而且还提供了几个常用的桌面对象:默认桌面(Default)、当前线程所在桌面(Current)和跟用户进行交互的桌面(Input)。来看看VirtualDesktop的类视图:
的是SetThreadDesktop函数,它的作用是设置当前线程的工作桌面为新的虚拟桌面,这个API函数MSDN是这么解释的:
The SetThreadDesktop function will fail if the calling thread has any windows or hooks on its current desktop (unless the hDesktop parameter is a handle to the current desktop).
就是说需要切换Desktop的线程中不能有任何UI方面的东西,所以如果当前线程包含有UI的话,需要在新的线程中调用它,像下面这个例子:
System.Threading.Thread th = new System.Threading.Thread(
new System.Threading.ThreadStart(delegate()
{
_vDesktop.SetThreadDesktop();
}));
程序中提供了一个简单的例子,当你启动程序后,按 Ctrl + 1,进入新的虚拟桌面,按 Ctrl + 2,进入默认的桌面。大家在使用的时候,一定要记得加上让自己可以返回原来桌面的方法,要不就只能重启电脑或者注销了,因为新桌面是不会包含原来桌面的程序的,进去就是空空的,什么都没有。
声明:
本文版权归作者和CS 程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
作者:Starts_2000
出处:CS 程序员之窗。
你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看: