Preventing or stopping the screensaver from going on from your C++ Windows program
To intercept the screensaver on Win32, you trap the WM_SYSCOMMAND message in your WndProc, then you check the value of wparam. SC_SCREENSAVE is the screensaver and SC_MONITORPOWER is that windowsy force that wants to shut off the monitor to save power.
To disable either, just return 0 from the event handler function under those cases.
Example:
// This is a piece of WNDPROC: LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam ) { switch( message ) { . . . case WM_SYSCOMMAND: { // There is a system command // wparam has the exact command type that it is switch( wparam ) { case SC_MOVE: printf("You're moving the window!\n"); // don't interfere with this one, otherwise your window // won't move normally when the user tries to move it! break; case SC_SCREENSAVE: // screensaver wants to begin return 0; // returning 0 PREVENTS those things from happening // Note about SC_SCREENSAVE: // Try this. Go into your settings and change // your screensaver to start after 1 minute. // Then run this program and sit and wait // for the 1 minute. // The funny thing about this, is Windows will // keep trying to enter screen saver mode, // by sending your app a "message" every // half a second or so. // If all you do is return 0; from this // part, your app will keep on stopping // the screensaver from starting. And // Windows will keep asking if it can // start the screen saver or not, until // the user does something to reset the // screensaver-turn-on timer like move the mouse // or press a key on the keyboard. // if you wait even longer, the same thing // happens with SC_MONITORPOWER, except // you keep getting 2 messages now. case SC_MONITORPOWER: // monitor wants to shut off - powersaver mode return 0; // returning 0 PREVENTS monitor from turning off } // end wparam inner switch } //end case WM_SYSCOMMAND . . . } // end switch(message) } // end WndProc