2010-04-05 4 views
2

J'ai besoin de réveiller un ordinateur du mode veille pour effectuer certaines actions en utilisant C#.Comment allumer le moniteur après le réveil du mode suspension?

J'ai utilisé les fonctions CreateWaitableTimer, tout va bien. A un moment donné, le PC se réveille mais le moniteur reste en mode d'économie d'énergie (éteint)! Donc, je veux savoir, comment allumer le moniteur après le réveil? PS J'ai essayé "Guide complet sur la façon d'activer/désactiver/veille un moniteur" - avec SendMessage (Codeproject) et SetThreadExecutionState (ES_DISPLAY_REQUIRED) - cela ne fonctionne pas pour moi.

Des idées?

+1

Cette question fait zéro sens. Un moniteur est pour un humain à regarder, ce n'est pas une lampe de poche. –

Répondre

0

Essayez de déplacer la souris. Lorsque je me réveille mon système Windows 7 avec un robinet sur le clavier, l'écran reste noir jusqu'à ce que je bouge la souris.

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

Non, cela ne fonctionne pas non plus. Mais après avoir allumé le moniteur en appuyant sur la touche du clavier - j'ai remarqué que le curseur mis en position (x, y), donc le code a été exécuté –

0

pour moi, il fonctionne très bien utiliser PInvoke pour appeler SendMessage.
exemple de code pour 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); 
     } 
    } 
} 

la solution ci-dessus a été inspiré par cette réponse: https://stackoverflow.com/a/332733/1468842

Questions connexes