我相信我将需要在SetDisplayConfig()中执行此操作的示例.我的Windows-7系统有两个监视器.当我的程序处于一种模式时,第一台显示器必须打开并处于主模式,第二台显示器必须关闭.在另一种模式下,反之亦然:关闭第一台显...
我相信我将需要在SetDisplayConfig()中执行此操作的示例.
我的Windows-7系统有两个监视器.当我的程序处于一种模式时,第一台显示器必须打开并处于主模式,第二台显示器必须关闭.在另一种模式下,反之亦然:关闭第一台显示器,打开第二台显示器,然后再启动.
我已经搜索了Windows SDK函数“ SetDisplayConfig()”,但没有找到任何方法. MSDN对SetDisplayConfig()的引用对我来说太深奥了,并且没有示例代码.
我使用ChangeDisplaySettingsEx()实现了该功能,但在Windows-7中此功能不稳定.
谢谢!
解决方法:
我目前还同时使用SetDisplayConfig()和ChangeDisplaySettingsEx(),发现这似乎可以用于我的设置. SDC_TOPOLOGY_INTERNAL和SDC_TOPOLOGY_EXTERNAL指的是Windows决定您的主(屏幕)和辅助(投影机)显示器是什么,类似于您按Win P时选择的显示器.这对我来说是另一回事,因此您必须检查正确的东西在您的配置之一.然后,您可以简单地调用InternalDisplay()或ExternalDisplay()来激活一个并自动停用另一个.为了完整起见,我添加了克隆并扩展了设置.
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern long SetDisplayConfig(uint numPathArrayElements,
IntPtr pathArray, uint numModeArrayElements, IntPtr modeArray, uint flags);
UInt32 SDC_TOPOLOGY_INTERNAL = 0x00000001;
UInt32 SDC_TOPOLOGY_CLONE = 0x00000002;
UInt32 SDC_TOPOLOGY_EXTEND = 0x00000004;
UInt32 SDC_TOPOLOGY_EXTERNAL = 0x00000008;
UInt32 SDC_APPLY = 0x00000080;
public void CloneDisplays() {
SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_CLONE));
}
public void ExtendDisplays() {
SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_EXTEND));
}
public void ExternalDisplay() {
SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_EXTERNAL));
}
public void InternalDisplay() {
SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_INTERNAL));
}
本文标题为:如何在C#中为Windows-7设置主监视器
基础教程推荐
- WPF使用Geometry绘制几何图形 2023-06-21
- SQLServer批量插入数据的三种方式及性能对比 2023-05-11
- C#中FlagsAttribute属性在enum中的应用详解 2023-03-14
- C#控件picturebox实现画图功能 2022-12-31
- 详解WPF如何在基础控件上显示Loading等待动画 2023-07-18
- C#建立测试用例系统的示例代码 2023-03-04
- C# 提取PDF中的表格详情 2023-05-06
- unity3d 对接 workerman 实现联机游戏功能 2023-07-04
- 详解C#中对于接口的实现方式(隐式接口和显式接口) 2023-02-03
- 如何识别C#中是否成功执行SQL作业 2023-11-23