通过 Win32 API 或 NVidia API 启用/禁用多个显示器?

Posted

技术标签:

【中文标题】通过 Win32 API 或 NVidia API 启用/禁用多个显示器?【英文标题】:Enable/Disable multiple monitors via Win32 API or NVidia API? 【发布时间】:2011-10-02 22:50:15 【问题描述】:

我正在尝试编写一个小型实用程序,该实用程序将使用我的 nVidia 显卡在 Windows 7 下启用/禁用监视器。 (即“将桌面扩展到此显示器上”等)

原因是我的 nVidia Geforce GTX 480 有三个输出(2x DVI,1x Mini-HDMI),但在任何给定时间只允许两个处于活动状态,所以当我想切换到我的显示器时,我需要启用/禁用显示器电视 (HDMI) 显示器。

Win32 API 函数 EnumDisplayDevices 不起作用,因为它不显示禁用的监视器。

nVidia 提供 API (NVAPI) 并具有枚举所有监视器(甚至禁用的监视器)的功能,您可以启用监视器但不能禁用监视器. (我指的是 NvAPI_CreateDisplayFromUnAttachedDisplay)

UltraMon 似乎已经知道如何执行此操作,但我找不到任何信息。

【问题讨论】:

嗨!您找到任何解决方案了吗?我正在尝试制作类似的应用程序来远程管理来自 android 设备的监视器布局。 如果 EnumDisplayDevice() 没有返回禁用的显示器,SetupDi* 函数应该为您提供必要的设备名称,包括 PNP 设备 ID 【参考方案1】:

我认为如果已经连接了三分之二的显示器,则不会检测到第三个。 该卡将停止侦听新硬件。 您必须手动取出电缆,然后将新电缆插入不同的端口。 除非有办法“弹出”连接,类似于 USB 存储设备。

【讨论】:

以上是关于通过 Win32 API 或 NVidia API 启用/禁用多个显示器?的主要内容,如果未能解决你的问题,请参考以下文章

win32 api 原理

如何从 PHP 进行 Win32 API 调用?

转 python通过win32api轻松获取控件的属性值

C#通过WIN32 API实现嵌入程序窗体

如何使用 WIN32 C/C++ API 告诉 Windows 10 平铺、居中或拉伸桌面壁纸?

.net API 与win32API