浮华过后,真金始现

一切问题最终都是时间问题,一切烦恼其实都是自寻烦恼
随笔 - 20, 文章 - 10, 评论 - 92, 阅读 - 83858
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   Kolor  阅读(6584)  评论(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下编译通过
源代码下载


编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示