了解如何在C#中turn the monitor screen on/off。但是我该如何获得目前的状态?
答案 0 :(得分:0)
简单地说,没有办法告诉监控状态。至少不可靠。
您可以尝试使用GetDevicePowerState,但官方说它不起作用,有些人报告它。在我的一台计算机上,它确实是,在所有其他计算机上 - 它没有。
此外,收听系统电源信息是不可靠的,因为用户可能会自行关闭它,您将无法检测到它。
您可以使用此代码打开或关闭它,但这就是它。我也留下了GetDevicePowerState引用,也许它会在你的情况下工作,但可能不会(我得到错误6,这是来自WinAPI的无效句柄错误代码)
class Program
{
const int SYSCOM = 0x0112;
const int MONPOW = 0xF170;
const int MON_ON = -1;
const int MON_OFF = 2;
const int MON_STANBY = 1;
const int MONITOR_DEFAULTTOPRIMARY = 1;
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hwnd, uint msg, int wParam, int lParam);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags);
[DllImport("kernel32.dll", SetLastError =true)]
static extern bool GetDevicePowerState(IntPtr handle, out bool state);
[DllImport("kernel32.dll")]
static extern uint GetLastError();
static void Main(string[] args)
{
IntPtr handle = FindWindow(null, null);
IntPtr monitorHandle = MonitorFromWindow(handle, MONITOR_DEFAULTTOPRIMARY);
SendMessage(handle, SYSCOM, MONPOW, MON_OFF);
bool isOn, result;
result=GetDevicePowerState(monitorHandle, out isOn);
uint err = GetLastError();
if (result)
{
Console.WriteLine("Monitor power state: "+isOn);
}
Console.WriteLine(err);
Console.ReadKey();
}
}
答案 1 :(得分:0)
CapabilitiesRequestAndCapabilitiesReply
如果显示器关闭,则返回零。