Inheritance: System.Windows.Forms.ApplicationContext
        public FileNodes(Config config, Screensaver screensaver)
        {
            this.config = config;
            this.screensaver = screensaver;
            this.fileDatabase = new FileDatabase(this.screensaver.readOnly);
            //this.fileDatabase.MetadataReadEvent += new MetadataReadEventHandler(metadataShow);

            if (screensaver.action != Screensaver.Actions.Wallpaper) {

                this.resetFoldersQueue();

                this.backgroundWorker = new System.ComponentModel.BackgroundWorker();
                this.backgroundWorker.WorkerReportsProgress = true;
                this.backgroundWorker.WorkerSupportsCancellation = true;
                this.backgroundWorker.DoWork += new DoWorkEventHandler(DoWorkImageFolder);
                this.backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(progressChanged);
                this.backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(runWorkerCompleted);

                // Use local folders as this.folders is used in backgroundWorker
                //var folders = Utils.stringToConcurrentQueue(Convert.ToString(this.config.getPersistant("folders")));
                // Purge database in main thread rather, to avoid having to run database filter twice
                this.purgeNotMatchingParentFolders(this.folders);

                this.backgroundWorker.RunWorkerAsync();
            }
        }
 //private bool installUpdates = false;
 //public WebBrowser browser;
 //private delegate void AddBrowser();
 public Config(Screensaver screensaver)
 {
     this.screensaver = screensaver;
     this.InitializeComponent();
     this.browser.ObjectForScripting = this;
     this.browser.AllowWebBrowserDrop = false;
     foreach (Screen screen in Screen.AllScreens) {
         this.maxMonitorDimension = Math.Max(Math.Max(this.maxMonitorDimension, screen.Bounds.Width), screen.Bounds.Height);
     }
 }
        public Monitor(IntPtr previewHwnd, int id, Screensaver screensaver)
            : this(id, screensaver)
        {
            SetParent(this.Handle, previewHwnd);
            SetWindowLong(this.Handle, -16, new IntPtr(GetWindowLong(this.Handle, 0) | 0x40000000));

            // Place our window inside the parent
            Rectangle ParentRect;
            GetClientRect(previewHwnd, out ParentRect);
            Size = ParentRect.Size;
        }
 public Monitor(int id, Screensaver screensaver)
 {
     InitializeComponent();
     //            MessageBox.Show("Monitor: " + id);
     this.browser.Url = new Uri(Constants.getDataFolder(Constants.MonitorHtmlFile), System.UriKind.Absolute);
     this.screensaver = screensaver;
     this.id = id;
     this.Text = "Monitor " + Convert.ToString(this.id+1) + " " + Constants.AppName;
     this.history = new List<long>();
     this.browser.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.DocumentCompleted);
 }
 public Monitor(Rectangle Bounds, int id, Screensaver screensaver)
     : this(id, screensaver)
 {
     this.Bounds = Bounds;
 }
        static void Main(string[] args) {
            //MessageBox.Show(String.Join(" ", args));
            IntPtr previewHwnd = IntPtr.Zero;
            IntPtr[] hwnds;
            Actions action = Actions.Screensaver;
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            hwnds = null;
            if (args.Length > 0) {
                string arg1 = args[0].ToLower().Trim();
                string arg2 = null;
                if (arg1.Length > 2) {
                    arg2 = arg1.Substring(3).Trim();
                    arg1 = arg1.Substring(0, 2);
                } else if (args.Length > 1) {
                    arg2 = args[1];
                }
                switch (arg1[1]) {
                    case 'a':
                        string path="";
                        for (int i = 1; i < args.Length; i++) path += args[i] + " ";
                        path = path.Trim();
                        //MessageBox.Show(path);
                        Screensaver.setAsCurrentScreensaver(path);
                        /*
                        MessageBox.Show("IsAdmin: " + Convert.ToString(Screensaver.IsRunAsAdmin()) + Environment.NewLine + Path.Combine(
                            Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), 
                            Constants.AppFolderName,
                            Constants.DataFolder));*/
//                        MessageBox.Show("IsAdmin: " + Convert.ToString(Screensaver.IsRunAsAdmin()));
                        Application.Exit();
                        return;
                    break;
                    case 'c':
                        action = Actions.Config;
                    break;
                    case 't':
                    case 'p':
                        if (arg1[1] == 't') action = Actions.Test;
                        else action = Actions.Preview;
                        //action = Actions.Test;
                        hwnds = new IntPtr[args.Length - 1];
                        for (int i = 1; i < args.Length; i++) {
                            hwnds[i - 1] = new IntPtr(long.Parse(args[i]));
                        }
                        //previewHwnd = new IntPtr(long.Parse(arg2));
                    break;
                    case 'o':
                        string setting = "0";
                        string value = args[0].Trim("-/\\".ToCharArray());
                        if (string.Compare(value, "on", true) == 0) setting = "1";
                        string oldValue = "on";
                        if (Convert.ToString(Registry.GetValue("HKEY_CURRENT_USER\\Control Panel\\Desktop", "ScreenSaveActive", null)) == "0") oldValue = "off";
                        Registry.SetValue("HKEY_CURRENT_USER\\Control Panel\\Desktop", "ScreenSaveActive", setting);
                        MessageBox.Show("Your screensaver has been truned " + value + "." + Environment.NewLine + "(It was " + oldValue + ")", Constants.AppName, MessageBoxButtons.OK, MessageBoxIcon.Information );
                        Application.Exit();
                        return;
                    break;
                    case 'w':
                        action = Actions.Wallpaper;
                    break;
                    case 'x':
                        string wallpaperPath = args[1].Trim("-/\\".ToCharArray());
                        Wallpaper.setWallpaper(wallpaperPath);
                        Application.Exit();
                        return;
                    break;

                }
            }
            bool readOnly = Screensaver.singleProcess(action);
            if (!Screensaver.checkBrowserVersionOk()) {
                Application.Exit();
                return;
            }

            Screensaver screensaver = new Screensaver(action, readOnly, hwnds);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(screensaver.CleanUpOnException);
            switch (action) {
                case Actions.Config:
                    Application.Run(screensaver);
                break;
                case Actions.Preview:
                    //MessageBox.Show(hwnds[0].ToString());
                    screensaver.monitors = new Monitor[hwnds.Length];
                    screensaver.monitors[0] = new Monitor(hwnds[0], 0, screensaver);
                    screensaver.monitors[0].FormClosed += new FormClosedEventHandler(screensaver.OnFormClosed);
                    screensaver.monitors[0].PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(screensaver.PreviewKeyDown);
                    screensaver.monitors[0].browser.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(screensaver.PreviewKeyDown);
                    Application.Run(screensaver.monitors[0]);
                break;
                default:
                    Cursor.Hide();
                    Application.AddMessageFilter(new MouseMessageFilter());
                    MouseMessageFilter.MouseMove += new MouseEventHandler(screensaver.MouseMove);
                    MouseMessageFilter.MouseClick += new MouseEventHandler(screensaver.MouseClick);

                    Application.Run(screensaver);
                break;
            }
        }
 public void setBrowserBodyClasses(WebBrowser browser, Screensaver.Actions action)
 {
     setBrowserBodyClasses(browser, action, null);
 }
 public static void setBrowserBodyClasses(WebBrowser browser, Screensaver.Actions action, string classes)
 {
     HtmlElementCollection elems = browser.Document.GetElementsByTagName("body");
     foreach (HtmlElement elem in elems) {
         switch (action) {
             case Screensaver.Actions.Preview: classes += " preview"; break;
             case Screensaver.Actions.Config: classes += " config"; break;
             case Screensaver.Actions.Screensaver: classes += " screensaver"; break;
             case Screensaver.Actions.Test: classes += " test"; break;
             case Screensaver.Actions.Slideshow: classes += " slideshow"; break;
         }
         classes += " IE" + browser.Version.Major;
         if (browser.Version.Major < 8) classes += " lowIE";
         elem.SetAttribute("className", elem.GetAttribute("className") + classes);
     }
 }
 public Wallpaper(Screensaver screensaver)
 {
     this.screensaver = screensaver;
 }