18

次のコードを使用して、モニターのオンとオフを切り替えます。

[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でこれを機能させる方法について何か提案はありますか?

4

4 に答える 4

15

私は同じ問題を抱えていました。私が見つけた解決策は、マウスを動かすことです:

mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, NULL);
Sleep(40);
mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, NULL);

モニターを起動します。アーリーパール

于 2012-12-28T10:39:08.640 に答える
8

必要なインクルードを含むEarlypearlの回答は次のとおりです。

[DllImport("user32.dll")]
static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo);

private const int MOUSEEVENTF_MOVE = 0x0001;

private void Wake(){
    mouse_event(MOUSEEVENTF_MOVE, 0, 1, 0, UIntPtr.Zero);
    Sleep(40);
    mouse_event(MOUSEEVENTF_MOVE, 0, -1, 0, UIntPtr.Zero);
}
于 2013-01-05T12:23:53.237 に答える
0

Windows 8.1で動作するこのトリックを見つけました

それらをオフにする

SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)MonitorShutoff);

オンにする

SendMessage(f.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)1);

MSNによると、「1」はモニターを「低電力」に切り替えることですが、うまくいきます。画面がオフになりません。

于 2016-03-18T08:05:04.180 に答える