我相信我将需要在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设置主监视器


基础教程推荐
- C# 三种方式实现Socket数据接收 2023-05-05
- C# 读写XML(代码分享) 2022-11-08
- C#调用新浪微博API实例代码 2023-02-02
- C#中常用的运算符总结 2023-01-16
- 判断一个整数是否是2的N次幂实现方法 2022-11-26
- C# 使用Free Spire.Presentation 实现对PPT插入、编辑、删除表格 2022-11-18
- c#读取XML多级子节点 2022-11-09
- c# – Powershell中的HashSet:Collection是固定大小的 2023-09-20
- C# wpf简单颜色板的实现 2023-05-05
- C#线程池ThreadPool用法简介 2023-06-08