我相信我将需要在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#访问网络共享文件夹的方法 2022-12-26
- C# dump系统lsass内存和sam注册表详细 2023-05-06
- Unity使用鼠标旋转物体效果 2023-04-27
- C#并行编程之数据并行Tasks.Parallel类 2023-06-05
- 详解C#如何优雅地终止线程 2023-07-18
- C#关键字之覆写overwrite介绍 2023-05-31
- C#拷贝整个文件夹及子目录和其中文件的方法 2023-01-22
- C#实现读写CSV文件的方法详解 2023-06-15
- C#导航器Xpath与XPathNavigator类 2023-06-09
- C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形的方法详解 2023-03-14