【问题标题】:Detect all connected monitors using Windows API使用 Windows API 检测所有连接的监视器
【发布时间】:2015-08-23 21:02:49
【问题描述】:

我使用的是 Windows 7。当我在 PC 运行时插入新显示器时,不会自动检测到显示器。我必须转到 Display->Screen Resolution 并单击 Detect 按钮才能使用注册表配置检测显示器。

我正在寻找一种使用 Windows API 以编程方式执行相同操作的方法。所以我想编写一个程序来检测所有连接的监视器,以重现检测按钮。我尝试使用ChangeDisplaySettingEx,但结果很糟糕。有什么建议吗?

【问题讨论】:

标签: winapi


【解决方案1】:

不是真正的 WinApi,但试试这个实用程序:

C:\Windows\System32\DisplaySwitch.exe

DisplaySwitch.exe /internal - Switch to Primary only
DisplaySwitch.exe /external - Switch to Secondary only
DisplaySwitch.exe /clone - Clone desktop on both screens (Not HDCP compliant!)
DisplaySwitch.exe /extend - Extend desktop to both screens

特别是尝试 /extend 开关,它应该在内部执行检测。

【讨论】:

  • 我遇到了类似的问题 - 当我的笔记本电脑唤醒时,有时只有连接的显示器会打开,但我的笔记本电脑显示屏仍然是黑色的。显示属性中的“检测”使笔记本电脑屏幕重新打开,但 Windows 任务栏出现故障。所以我还需要重新启动 explorer.exe 进程来解决这个问题。但是,这种方法解决了这两个问题。我必须先运行“/internal”才能识别笔记本电脑屏幕,然后运行“/extend”才能重新打开连接的显示器。但这是可以编写脚本的,所以我不必做所有其他废话。谢谢!
【解决方案2】:

不是 API 解决方案,但您可以在命令行上使用 MS 的 DevCon 实用程序来扫描新硬件。

https://support.microsoft.com/en-us/kb/311272

从该页面下载它,然后从 cmd 窗口执行:

devcon.exe rescan

您可以轻松地创建一个 .bat 或 .cmd 文件以通过链接运行它。

【讨论】:

【解决方案3】:

如果您想了解显示感知应用程序,您应该阅读this

【讨论】:

  • 这有什么关系?
  • 因为当新的显示器连接/移除时,Windows 会向应用发送 WM_DISPLAYCHANGE 消息;我记得。
  • 如果是这样,您应该将其包含在您的答案中。仅链接的答案是不好的答案。无论如何,OP 的问题是没有检测到新连接的显示器,因此很可能不会发送 WM_DISPLAYCHANGE,直到 OP 在显示控制面板中单击“识别”。
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多