private static void SetScreenSaverPreviewMode(string previewHandle) { _bPreviewMode = true; _screenSavers = new PreviewScreenSaver[1]; _screenSavers[0] = new PreviewScreenSaver(new IntPtr(long.Parse(previewHandle)), _logger); _logger.WriteTimestampedMessage("successfully started a preview screensaver."); }
public static void TerminateApplication(bool bClickThroughPressed) { if (_bTerminationStarted) { return; } lock (_terminationObj) { // as long as _bTerminationStarted is only being accessed within a thread // by a locked _terminationObj, it doesn't matter if we check it's value first and set its value // second or sets its value first and check its value second if (_bTerminationStarted) { return; } _bTerminationStarted = true; } _clickThroughPressed = bClickThroughPressed; if (_bPreviewMode) { PreviewScreenSaver pss = (PreviewScreenSaver)_screenSavers[0]; pss.Dispose(); Application.Exit(); return; } foreach (ScreenSaver screensaver in _screenSavers) { screensaver.FadeToDesktop(); } bool atleastOneThreadsRunning = true; while (atleastOneThreadsRunning) { atleastOneThreadsRunning = false; foreach (ScreenSaver screensaver in _screenSavers) { if (screensaver.SelectAndLoadThreadRunning) { atleastOneThreadsRunning = true; break; } } if (atleastOneThreadsRunning) { Application.DoEvents(); } } foreach (ScreenSaver screensaver in _screenSavers) { screensaver.ReleaseForms(); } // if spacebar was hit, pop up browser windows and write click logs if (_clickThroughPressed) { ClickThroughPressed(); } WriteLogs(true); // dispose of all forms, for each monitor foreach (ScreenSaver screensaver in _screenSavers) { // in preview mode, the form is closed when user presses OK, Cancel or Preview, // and raising the OnClose event again here would result in an infinite loop with TerminateApplication. screensaver.Close(); _logger.WriteTimestampedMessage("successfully closed forms."); screensaver.DisposeForms(); _logger.WriteTimestampedMessage("successfully disposed all screen saver objects."); } // local cleanup _playlist = null; if (_logTimer != null) { _logTimer.Stop(); _logTimer.Dispose(); _logTimer = null; _logger.WriteTimestampedMessage("successfully disposed of log timer."); } if (_autoExecuteProgramTimer != null) { _autoExecuteProgramTimer.Stop(); _autoExecuteProgramTimer.Dispose(); _autoExecuteProgramTimer = null; _logger.WriteTimestampedMessage("successfully disposed of auto-execute program timer."); } if (_launchApp) { // start external process try { Process.Start(_user.ProgramToRun); } catch { _logger.WriteWarning("Could not start external process"); } _logger.WriteTimestampedMessage("Exiting application."); } // exit application Application.Exit(); }