2010-04-05 51 views
2

我需要从睡眠中唤醒PC以执行一些使用C#的操作。我使用了CreateWaitableTimer功能,一切都很顺利。在给定时间PC唤醒,但显示器保持省电模式(关闭)!如何从挂起模式唤醒后打开显示器?

所以我想知道,如何在唤醒后打开显示器?

PS我已经尝试了“关于如何把显示器开启/关闭/待机完全指南” - 与SendMessage函数(Codeproject)和SetThreadExecutionState(ES_DISPLAY_REQUIRED) - 它不会为我工作。

任何想法?

+1

这个问题使零意义。监视器是供人看的,它不是手电筒。 – 2010-04-05 11:15:33

回答

0

试着让鼠标移动。当我用键盘敲击我的Windows 7系统时,屏幕会保持黑色,直到我移动鼠标。

Cursor.Position = new Point(x, y); 
+0

不,它也行不通。但是当我按下键盘按键打开显示器后 - 我注意到光标被设置为(x,y)的位置,所以代码被执行了 – 2010-04-05 10:25:46

0

对我来说,使用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