【问题标题】:Powering off multiple monitors programmatically [duplicate]以编程方式关闭多台显示器[重复]
【发布时间】:2017-06-04 18:47:47
【问题描述】:

我正在寻找一种以编程方式关闭多台显示器的方法。

注意:这并不意味着关闭所有显示器。

我目前能够在当前环境中编译的语言是 python/C/C++。我知道简单的 C++ 方式。

SendMessage(GetConsoleWindow(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);

但是,这会关闭系统打开的所有监视器,这不是我想要的结果。

假设我有一个名为“应用程序窗口”的窗口,现在我想关闭所有未打开此应用程序窗口的显示器。

注意:理想情况下,它会用 python 实现,但不需要。

编辑: 找到了这个,但是我无法重新创建它并拥有所需的功能。

Cpp how to turn off specific monitor?

【问题讨论】:

  • 如果您无法关闭单个监视器,除非禁用监视器,这不会让我感到惊讶。 Windows 中的电源管理软件不需要这样做。要么所有显示器都处于省电模式(关闭),要么都没有。
  • @RossRidge 如果我要禁用显示器,是否会将该显示器上打开的应用程序移至另一台显示器,或者它们会保留在该显示器/像素位置上?
  • 如果您禁用了一个监视器,Windows 会将该监视器上的所有窗口移动到另一个启用的监视器。
  • @RossRidge Mhm 你认为像让显示器显示一个纯黑色的屏幕保护程序这样的方法可以解决问题吗?
  • 看起来你链接的答案建议使用SetVCPFeature 应该可以解决问题,但我也无法让它工作。 GetPhysicalMonitorsFromHMONITOR 只为我返回 NULL 句柄。

标签: python c++ python-3.x winapi multiple-monitors


【解决方案1】:

使用ctypes可以访问你提到的winapi函数:

import ctypes

WM_SYSCOMMAND = 0x0112
SC_MONITORPOWER = 0xF170

window = ctypes.windll.kernel32.GetConsoleWindow()

ctypes.windll.user32.SendMessageA(window, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

msdn 文档:

你应该使用GetDesktopWindow:

window = ctypes.windll.kernel32.GetDesktopWindow()

【讨论】:

  • 好的,但是如何关闭特定监视器?
  • 他说很简单...我只是在python中复制了它
  • 无论如何使用winapi所有的显示器都会被关闭。我看不到单独打开显示器的选项。
  • 是的,这很好,但不完全是我想要的,这与 C++ 解决方案相同,这不是我想要实现的。
  • @sza 请再读一遍问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多