我需要從睡眠中喚醒PC以執行一些使用C#的操作。我使用了CreateWaitableTimer
功能,一切都很順利。在給定時間PC喚醒,但顯示器保持省電模式(關閉)!如何從掛起模式喚醒後打開顯示器?
所以我想知道,如何在喚醒後打開顯示器?
PS我已經嘗試了「關於如何把顯示器開啓/關閉/待機完全指南」 - 與SendMessage函數(Codeproject)和SetThreadExecutionState(ES_DISPLAY_REQUIRED) - 它不會爲我工作。
任何想法?
我需要從睡眠中喚醒PC以執行一些使用C#的操作。我使用了CreateWaitableTimer
功能,一切都很順利。在給定時間PC喚醒,但顯示器保持省電模式(關閉)!如何從掛起模式喚醒後打開顯示器?
所以我想知道,如何在喚醒後打開顯示器?
PS我已經嘗試了「關於如何把顯示器開啓/關閉/待機完全指南」 - 與SendMessage函數(Codeproject)和SetThreadExecutionState(ES_DISPLAY_REQUIRED) - 它不會爲我工作。
任何想法?
試着讓鼠標移動。當我用鍵盤敲擊我的Windows 7系統時,屏幕會保持黑色,直到我移動鼠標。
Cursor.Position = new Point(x, y);
不,它也行不通。但是當我按下鍵盤按鍵打開顯示器後 - 我注意到光標被設置爲(x,y)的位置,所以代碼被執行了 – 2010-04-05 10:25:46
對我來說,使用pinvoke撥打電話SendMessage
工作正常。
爲CSHARP代碼示例:
using System;
using System.Runtime.InteropServices;
namespace MyDummyNamespace
{
class MyProgram
{
private static int Main(string[] args)
{
// your program code here
// ...
NativeMethods.MonitorOff();
System.Threading.Thread.Sleep(5000);
NativeMethods.MonitorOn();
return 0;
}
private static class NativeMethods
{
internal static void MonitorOn()
{
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (IntPtr)MONITOR_ON);
}
internal static void MonitorOff()
{
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (IntPtr)MONITOR_OFF);
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
private static int MONITOR_ON = -1;
private static int MONITOR_OFF = 2;
private static int MONITOR_STANBY = 1;
private static IntPtr HWND_BROADCAST = new IntPtr(0xffff);
private static UInt32 WM_SYSCOMMAND = 0x0112;
private static IntPtr SC_MONITORPOWER = new IntPtr(0xF170);
}
}
}
上述方案被這個答案的啓發:https://stackoverflow.com/a/332733/1468842
這個問題使零意義。監視器是供人看的,它不是手電筒。 – 2010-04-05 11:15:33