浮华过后,真金始现

一切问题最终都是时间问题,一切烦恼其实都是自寻烦恼
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[原创]C#实现虚拟桌面

Posted on 2008-11-02 17:37  Kolor  阅读(6485)  评论(13编辑  收藏  举报

背景:
  以前写过类似TurboLaunch的WPF版快捷方式管理软件,加入了3D动画,还集成了虚拟桌面,但是因为比较忙,自出了第一个版本后就不了了之了,Bug多多,也懒得改了,后来就渐渐忘记了。不巧的是,今天有位朋友向我要拖入可执行文件或者快捷方式生成缩略图的代码,才把它翻了出来,想想又好久没写Blog了,所以就单独拎出虚拟桌面这块做了个小Demo,和大家分享下。说到这个虚拟桌面,还是当时刚学C#那会在Winform下实现的,Oh,扯远了,进入正题。

设计思路:
  虚拟桌面说白了就是将窗体分组进行显示,操作窗体的显隐藏,每个虚拟桌面可以包含多个窗体,并且只显示该虚拟桌面所包含的窗体。当然,桌面和任务栏是共享的,即所有的虚拟桌面都共用一个桌面和任务栏。

下面列出用到的API

private static class API
{
    
Import API
}


主要使用ShowWindow函数来设置窗体的显隐藏,其状态参数定义(API说明里是有10个的,不过我只定义了4个比较常用的)如下

WindowAction

在虚拟桌面间切换时,先清空当前窗体组(一个虚拟桌面对应一个窗体组),接着枚举所有窗体,保存状态为非隐藏的窗体句柄至当前窗体组,然后置该组所有窗体(除了桌面、任务栏和本虚拟软件程序)状态为WindowAction.Hide,然后置目标窗体组内所有窗体状态为WindowAction.ShowNoActivate。
当然,不要忘记了在程序退出事件中加入显示所有窗体组中的窗体的代码,否则非当前组的窗体可就看不到了。
源代码在VS2008下编译通过
源代码下载