如何获取显示的状态?

时间:2015-07-23 06:27:18

标签: c# .net screen

了解如何在C#中turn the monitor screen on/off。但是我该如何获得目前的状态?

2 个答案:

答案 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
如果显示器关闭,则返回零。