.net中对多显示器的支持
2006-07-01 23:42 无常 阅读(5165) 评论(0) 编辑 收藏 举报
现在很多显卡都带有S端子,可以直接接到电视或投影仪(当然双头显卡或是用双显卡也可以)。
winXp已经内置支持双显示器。装了双输出的显卡后在显示属性里会看到有二个监视器图标了。
在第二个监视器上选中“将window桌面扩展到该监视器上”,就可以把第二个监视器当作第一个监视器的延伸来用了。
例如二个监视器的分辨率都是1280*1024的话,那二个监视器加起来就有了2560*1024的桌面了。
使用时也很方便,只要把窗口拖到另一个监视器中去就行了。
这样可以在一个监视器上打开vs2005在另一监视器上打开msdn;或是在一个监视器上写程序另一个监视器上用pplive看世界杯。
.net2.0在System.Windows.Forms.Screen类提供了对多监视器的支持(参见ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/T_System_Windows_Forms_Screen.htm)。
页首
有了这个类,在程序中控制使用双监视器就很简单了,只要将窗体的移到相应监视器的坐标范围就可以了。
如下图,笔者用的是二个17寸LCD,主监视器分辨率用1280*1024,辅监视器放在右边,因为距离远了点所以分辨率用低了一档为1024*768。

如要将窗体移到辅显示器上显示,只需一行代码:
笔者现在在开发的系统中就有一个子系统需要实现进入系统后在主监视器操作而在辅监视器上全屏播放视频。
最初的方案是用一个商业软件,此软件可以在winxp中实现用二套鼠标键盘,二个用户登录后分别在二个监视器上工作,互不干扰。每次重启后都要用另一个用户登录进去播放视频,后来觉得这样太麻烦,找到资料好就自己写了个简单的播放器。在系统启动后自动在辅监视器上全屏播放视频。省去了每次要登录二个用户的麻烦。
winXp已经内置支持双显示器。装了双输出的显卡后在显示属性里会看到有二个监视器图标了。
在第二个监视器上选中“将window桌面扩展到该监视器上”,就可以把第二个监视器当作第一个监视器的延伸来用了。
例如二个监视器的分辨率都是1280*1024的话,那二个监视器加起来就有了2560*1024的桌面了。
使用时也很方便,只要把窗口拖到另一个监视器中去就行了。
这样可以在一个监视器上打开vs2005在另一监视器上打开msdn;或是在一个监视器上写程序另一个监视器上用pplive看世界杯。
.net2.0在System.Windows.Forms.Screen类提供了对多监视器的支持(参见ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/T_System_Windows_Forms_Screen.htm)。
公共属性
名称 | 说明 | |
---|---|---|
AllScreens | 获取系统上所有显示器的数组。 | |
BitsPerPixel | 获取与数据的一个像素相关联的内存位数。 | |
Bounds | 获取显示的边界。 | |
DeviceName | 获取与显示关联的设备名称。 | |
Primary | 获取一个值,该值指示某个显示是否为主设备。 | |
PrimaryScreen | 获取主显示。 | |
WorkingArea | 获取显示器的工作区。工作区是显示器的桌面区域,不包括任务栏、停靠窗口和停靠工具栏。 |
公共方法 (请参见 受保护的方法 )
名称 | 说明 | |
---|---|---|
Equals | 已重载。 已重写。 | |
FromControl | 在 Screen 中检索包含指定控件的最大部分的显示器。 | |
FromHandle | 检索包含该对象(被指定句柄所引用)的最大部分的显示器的 Screen。 | |
FromPoint | 检索包含指定点的显示器的 Screen。 | |
FromRectangle | 检索包含矩形的最大部分的显示器的 Screen。 | |
GetBounds | 已重载。 检索显示器的边界。 | |
GetHashCode | 已重写。 计算并检索对象的哈希代码。 | |
获取当前实例的 |
||
GetWorkingArea | 已重载。 检索显示器的工作区。 | |
确定指定的 |
||
ToString | 已重写。 检索表示此对象的字符串。 |
有了这个类,在程序中控制使用双监视器就很简单了,只要将窗体的移到相应监视器的坐标范围就可以了。
如下图,笔者用的是二个17寸LCD,主监视器分辨率用1280*1024,辅监视器放在右边,因为距离远了点所以分辨率用低了一档为1024*768。

如要将窗体移到辅显示器上显示,只需一行代码:
this.DesktopLocation=Screen.AllScreens[1].Bounds.Location;
如果要在辅显示器上全屏显示:this.FormBorderStyle=FormBorderStyle.None;
this.DesktopBounds=Screen.AllScreens[1].Bounds;
this.DesktopBounds=Screen.AllScreens[1].Bounds;
笔者现在在开发的系统中就有一个子系统需要实现进入系统后在主监视器操作而在辅监视器上全屏播放视频。
最初的方案是用一个商业软件,此软件可以在winxp中实现用二套鼠标键盘,二个用户登录后分别在二个监视器上工作,互不干扰。每次重启后都要用另一个用户登录进去播放视频,后来觉得这样太麻烦,找到资料好就自己写了个简单的播放器。在系统启动后自动在辅监视器上全屏播放视频。省去了每次要登录二个用户的麻烦。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架