C#モニタを閉じる

3814 ワード

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);
}
}