次のコードを使用して、モニターのオンとオフを切り替えます。
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xF170;
private const int MonitorTurnOn = -1;
private const int MonitorShutoff = 2;
//Turn them off
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorShutoff);
//Turn them on
SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorTurnOn);
これは以前は意図したとおりに機能していましたが、Windows 8 をインストールした後 (他の人も同じ問題を抱えているので、これが理由だと思います)、画面をオンにしても機能しません。オフにすることはできますが、MonitorTurnOn で SendMessage() を何度実行しても、モニターをオンに戻すには、マウスを動かすか、キーを押す必要があります。
Windows 8でこれを機能させる方法について何か提案はありますか?