Note that there are some explanatory texts on larger screens.

plurals
  1. POc# How to get the events when the screen/display goes to power OFF or ON?
    primarykey
    data
    text
    <p>Hi I have been searching but I can't find the answer. How do I know when the screen is going off or on. Not the SystemEvents.PowerModeChanged . I dont know how to retrieve the display/screen EVENTS</p> <pre><code> private const int WM_POWERBROADCAST = 0x0218; private const int WM_SYSCOMMAND = 0x0112; private const int SC_SCREENSAVE = 0xF140; private const int SC_CLOSE = 0xF060; // dont know private const int SC_MONITORPOWER = 0xF170; private const int SC_MAXIMIZE = 0xF030; // dont know private const int MONITORON = -1; private const int MONITOROFF = 2; private const int MONITORSTANBY = 1; [DllImport("user32.dll")] //static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); private static extern int SendMessage(IntPtr hWnd, int hMsg, int wParam, int lParam); public void Init(Visual visual) { SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; HwndSource source = ((HwndSource)PresentationSource.FromVisual(visual)); source.AddHook(MessageProc); Handle = source.Handle; } public void SwitchMonitorOff() { // works SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOROFF); } public void SwitchMonitorOn() {// works SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITORON); } public void SwitchMonitorStandBy() {// works SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITORSTANBY); } private IntPtr MessageProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (msg == WM_SYSCOMMAND) //Intercept System Command { // not finished yet // notice the 0xFFF0 mask, it's because the system can use the 4 low order bits of the wParam // value as stated in the MSDN library article about WM_SYSCOMMAND. int intValue = wParam.ToInt32() &amp; 0xFFF0; switch (intValue) { case SC_MONITORPOWER: //Intercept Monitor Power Message 61808 = 0xF170 InvokeScreenWentOff(null); Log("SC:Screen switched to off"); break; case SC_MAXIMIZE: // dontt know : Intercept Monitor Power Message 61458 = 0xF030, or //InvokeScreenWentOn(null); Log("SC:Maximazed"); break; case SC_SCREENSAVE: // Intercept Screen saver Power Message 61760 = 0xF140 InvokeScreenSaverWentOn(null); Log("SC:Screensaver switched to on"); break; case SC_CLOSE: // I think resume Power Message 61536 = 0xF060 //InvokeScreenWentOn(null); //InvokeScreenSaverWentOff(null); Log("SC:Close appli"); break; case 61458: Log("Resuming something"); // 61458:F012:F010 == something of resuming SC_MOVE = 0xF010; break; } } return IntPtr.Zero; } </code></pre> <p><strong>EDIT</strong></p> <p>Perhaps I can explain my intension, so there is perhaps a better solution. I have a Dual binding WCF service running on. It's running on an archos (portable tablet pc). I want that when the user stopped working for an idle time, the connection closes immediatly, and when the computer is returning from idle, he reconnects immediatly. The idea of <a href="http://www.codeproject.com/KB/miscctrl/Application_Idle.aspx" rel="noreferrer">Application Idle on Code project</a> from Tom is already a good idea. The less power consumption , the better. The startup must be as fast as possible.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload