[英]C# How to turn off specific monitor?
我知道如何使用 user32.dll 打開/關閉所有顯示器。
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2);
但我只想打開/關閉一個。
@戴是對的。 使用低級監視器配置功能可以關閉指定的監視器。
以下是選擇一台顯示器並關閉它的示例,5 秒后將其打開。
#include <windows.h>
#include <vector>
#include <lowlevelmonitorconfigurationapi.h>
#pragma comment(lib, "Dxva2.lib")
const BYTE PowerMode = 0xD6; // VCP Code defined in VESA Monitor Control Command Set (MCCS) standard
const DWORD PowerOn = 0x01;
const DWORD PowerOff = 0x04;
// Monitor description struct
struct MonitorDesc
{
HANDLE hdl;
DWORD power;
};
// Monitor enumeration callback
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
std::vector<MonitorDesc>* pMonitors = reinterpret_cast<std::vector<MonitorDesc>*>(dwData);
DWORD nMonitorCount;
if (GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &nMonitorCount))
{
PHYSICAL_MONITOR* pMons = new PHYSICAL_MONITOR[nMonitorCount];
if (GetPhysicalMonitorsFromHMONITOR(hMonitor, nMonitorCount, pMons))
{
for (DWORD i = 0; i < nMonitorCount; i++)
{
MonitorDesc desc;
desc.hdl = pMons[i].hPhysicalMonitor;
pMonitors->push_back(desc);
}
}
delete[] pMons;
}
return TRUE;
}
// Switch monitor power
void MonitorSwitch(MonitorDesc& monitor, DWORD mode)
{
if (monitor.power == mode)
return;
SetVCPFeature(monitor.hdl, PowerMode, mode);
monitor.power = mode;
}
int main()
{
std::vector<MonitorDesc> monitors;
EnumDisplayMonitors(NULL, NULL, &MonitorEnumProc, reinterpret_cast<LPARAM>(&monitors));
// Init
for (auto& monitor : monitors)
{
monitor.power = PowerOn;
}
// Here select the first one monitor as example
MonitorDesc targetMonitor = monitors[0];
// turn off
if (targetMonitor.power == PowerOn)
{
MonitorSwitch(targetMonitor, PowerOff);
}
Sleep(5000);
// turn on
if (targetMonitor.power == PowerOff)
{
MonitorSwitch(targetMonitor, PowerOn);
}
}
您始終可以從 nirsoft 運行ControlMyMonitor.exe 。
從 1.20 版開始,您可以使用以下方法打開和關閉監視器:
ControlMyMonitor.exe /SwitchValue "\\.\DISPLAY1\Monitor0" D6 1 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.