C#关闭所选的显示器

时间:2017-05-02 08:01:03

标签: c# dllimport

我想知道是否有人可以帮助我,我一直试图找到一种方法来关闭基本应用程序中的特定显示器,这里有几个关于关闭所有显示器的帖子,这很好用。我能看到的唯一话题是: C# selectively turn off monitor

这确实解释了如何做到这一点,但我还在学习,并且不确定如何将示例扩展到所需的内容。

关闭所有显示器:

public void MonitorOff(IntPtr handle)
    {
        SendMessage(handle, WmSyscommand, (IntPtr)ScMonitorpower, (IntPtr)MonitorShutoff);
    }

 private void MonitorOn()
    {
        mouse_event(MouseeventfMove, 0, 1, 0, UIntPtr.Zero);
        Thread.Sleep(40);
        mouse_event(MouseeventfMove, 0, -1, 0, UIntPtr.Zero);
    }


[DllImport("user32.dll")]
    static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
    [DllImport("user32.dll")]
    static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo);

    private const int WmSyscommand = 0x0112;
    private const int ScMonitorpower = 0xF170;
    private const int MonitorShutoff = 2;
    private const int MouseeventfMove = 0x0001;

    [DllImport("user32")]
    private static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lpRect, MonitorEnumProc callback, int dwData);

    private delegate bool MonitorEnumProc(IntPtr hDesktop, IntPtr hdc, ref Rect pRect, int dwData);

    [StructLayout(LayoutKind.Sequential)]
    private struct Rect
    {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }

计数监视器:

public void GetMonitors()
    {

        int monCount = 0;
        //Rect r = new Rect();
        MonitorEnumProc callback = (IntPtr hDesktop, IntPtr hdc, ref Rect prect, int d) => ++monCount > 0;

        if (EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, callback, 0))
           MessageBox.Show("You have " + monCount.ToString() + " monitors", "Windows Hook");
        else
           MessageBox.Show("An error occured while enumerating monitors");

    }

有人能够接受这个或者告诉我正确的路线吗?谢谢。

0 个答案:

没有答案