C#关闭显示器

windows为我们提供了一个API。可以实现即时关闭监视器。

此API在平台调用中,如下签名:

        [System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, uint wParam, int IParam);

此方法的各个参数类型有一些重载,一般还是建议用IntPtr,否则,在64位平台OR其它情况下可能会崩溃~

 

我们需要传给Msg 一个系统消息,即:WM_SYSCOMMAND

然后是附加信息,比如屏幕保护:SC_SCREENSAVE,监视器电源:SC_MONITORPOWER

WM_SYSCOMMAND 参数:http://msdn.microsoft.com/en-us/library/ms646360(VS.85).aspx

SC_MONITORPOWER 参数:http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html

SendMessage : http://www.pinvoke.net/default.aspx/user32/SendMessage.html

Console Application运行起来那个嘿嘿的窗体很讨厌,只需要在属性里面,改成Windows应用程序就不会有窗体出现了。

class Program
{
private const uint WM_SYSCOMMAND = 0x112; //系统消息
private const int SC_MONITORPOWER = 0xF170; //关闭显示器的系统命令
private const int MonitorPowerOff = 2; //2为PowerOff, 1为省电状态,-1为开机
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);//广播消息,所有顶级窗体都会接收
  [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

static void Main(string[] args)
{
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MonitorPowerOff);
}
}



 
posted @ 2011-11-18 15:16  Rookier  阅读(698)  评论(0编辑  收藏  举报