/// <summary> /// Loads the screens. /// </summary> public bool LoadXmlFileAndAddScreens(ImageFormatCollection imageFormatCollection) { try { _imageFormatCollection = imageFormatCollection; if (FileSystem.FileExists(FileSystem.ScreensFile)) { Log.WriteDebugMessage("Screens file \"" + FileSystem.ScreensFile + "\" found. Attempting to load XML document"); XmlDocument xDoc = new XmlDocument(); xDoc.Load(FileSystem.ScreensFile); Log.WriteDebugMessage("XML document loaded"); AppVersion = xDoc.SelectSingleNode("/autoscreen").Attributes["app:version"]?.Value; AppCodename = xDoc.SelectSingleNode("/autoscreen").Attributes["app:codename"]?.Value; XmlNodeList xScreens = xDoc.SelectNodes(SCREEN_XPATH); foreach (XmlNode xScreen in xScreens) { Screen screen = new Screen(); XmlNodeReader xReader = new XmlNodeReader(xScreen); while (xReader.Read()) { if (xReader.IsStartElement() && !xReader.IsEmptyElement) { switch (xReader.Name) { case SCREEN_VIEWID: xReader.Read(); screen.ViewId = Guid.Parse(xReader.Value); break; case SCREEN_NAME: xReader.Read(); screen.Name = xReader.Value; break; case SCREEN_FOLDER: xReader.Read(); screen.Folder = xReader.Value; break; case SCREEN_MACRO: xReader.Read(); screen.Macro = xReader.Value; break; case SCREEN_COMPONENT: xReader.Read(); screen.Component = Convert.ToInt32(xReader.Value); break; case SCREEN_FORMAT: xReader.Read(); screen.Format = imageFormatCollection.GetByName(xReader.Value); break; case SCREEN_JPEG_QUALITY: xReader.Read(); screen.JpegQuality = Convert.ToInt32(xReader.Value); break; case SCREEN_RESOLUTION_RATIO: xReader.Read(); screen.ResolutionRatio = Convert.ToInt32(xReader.Value); break; case SCREEN_MOUSE: xReader.Read(); screen.Mouse = Convert.ToBoolean(xReader.Value); break; case SCREEN_ACTIVE: xReader.Read(); screen.Active = Convert.ToBoolean(xReader.Value); break; case SCREEN_X: xReader.Read(); screen.X = Convert.ToInt32(xReader.Value); break; case SCREEN_Y: xReader.Read(); screen.Y = Convert.ToInt32(xReader.Value); break; case SCREEN_WIDTH: xReader.Read(); screen.Width = Convert.ToInt32(xReader.Value); break; case SCREEN_HEIGHT: xReader.Read(); screen.Height = Convert.ToInt32(xReader.Value); break; case SCREEN_SOURCE: xReader.Read(); screen.Source = Convert.ToInt32(xReader.Value); break; case SCREEN_DEVICE_NAME: xReader.Read(); screen.DeviceName = xReader.Value; break; } } } xReader.Close(); // Change the data for each Screen that's being loaded if we've detected that // the XML document is from an older version of the application. if (Settings.VersionManager.IsOldAppVersion(AppCodename, AppVersion)) { Log.WriteDebugMessage("An old version of the screens.xml file was detected. Attempting upgrade to new schema."); Version v2300 = Settings.VersionManager.Versions.Get(Settings.CODENAME_BOOMBAYAH, Settings.CODEVERSION_BOOMBAYAH); Version v2340 = Settings.VersionManager.Versions.Get(Settings.CODENAME_BOOMBAYAH, "2.3.4.0"); Version configVersion = Settings.VersionManager.Versions.Get(AppCodename, AppVersion); if (v2300 != null && configVersion != null && configVersion.VersionNumber < v2300.VersionNumber) { Log.WriteDebugMessage("Dalek 2.2.4.6 or older detected"); // This is a new property for Screen that was introduced in 2.3.0.0 // so any version before 2.3.0.0 needs to have it during an upgrade. screen.Active = true; } if (v2340 != null && configVersion != null && configVersion.VersionNumber < v2340.VersionNumber) { Log.WriteDebugMessage("Boombayah 2.3.3.2 or older detected"); int component = 1; foreach (System.Windows.Forms.Screen screenFromWindows in System.Windows.Forms.Screen.AllScreens) { ScreenCapture.DeviceResolution deviceResolution = ScreenCapture.GetDeviceResolution(screenFromWindows); if (screen.Component.Equals(component)) { screen.X = screenFromWindows.Bounds.X; screen.Y = screenFromWindows.Bounds.Y; screen.Width = deviceResolution.width; screen.Height = deviceResolution.height; screen.Source = 1; screen.DeviceName = deviceResolution.screen.DeviceName; } component++; } } } if (!string.IsNullOrEmpty(screen.Name)) { Add(screen); } } if (Settings.VersionManager.IsOldAppVersion(AppCodename, AppVersion)) { Log.WriteDebugMessage("Screens file detected as an old version"); SaveToXmlFile(); } } else { Log.WriteDebugMessage("WARNING: Unable to load screens. Initializing screen collection"); if (Settings.VersionManager.IsOldAppVersion(AppCodename, AppVersion)) { Version v2182 = Settings.VersionManager.Versions.Get(Settings.CODENAME_CLARA, Settings.CODEVERSION_CLARA); Version configVersion = Settings.VersionManager.Versions.Get(AppCodename, AppVersion); if (v2182 != null && configVersion != null && v2182.VersionNumber == configVersion.VersionNumber) { Add(new Screen() { ViewId = Guid.NewGuid(), Name = "Active Window", Folder = FileSystem.ScreenshotsFolder, Macro = MacroParser.DefaultMacro, Component = 0, Format = _imageFormatCollection.GetByName(ScreenCapture.DefaultImageFormat), JpegQuality = 100, ResolutionRatio = 100, Mouse = true, Active = true, X = 0, Y = 0, Width = 0, Height = 0, Source = 0, DeviceName = string.Empty }); } } AddDefaultScreens(); SaveToXmlFile(); } return(true); } catch (Exception ex) { Log.WriteExceptionMessage("ScreenCollection::LoadXmlFileAndAddScreens", ex); return(false); } }
/// <summary> /// Loads the user's saved settings. /// </summary> private void LoadSettings() { try { Log.WriteMessage("*** Welcome to " + Settings.ApplicationName + " " + Settings.ApplicationVersion + " (\"" + Settings.ApplicationCodename + "\") ***"); Log.WriteMessage("Starting application"); Log.WriteDebugMessage("At this point the application should be able to run normally"); Log.WriteDebugMessage("but it would be a good idea to check what we found in your autoscreen.conf file"); Log.WriteDebugMessage("Your autoscreen.conf file is \"" + FileSystem.ConfigFile + "\""); Log.WriteDebugMessage("The name and location of it can be changed with the -config command line argument:"); Log.WriteDebugMessage("autoscreen.exe -config=C:\\MyAutoScreenCapture.conf"); Log.WriteDebugMessage("Checking what we loaded from your autoscreen.conf file ..."); Log.WriteDebugMessage("ApplicationSettingsFile=" + FileSystem.ApplicationSettingsFile); Log.WriteDebugMessage("UserSettingsFile=" + FileSystem.UserSettingsFile); Log.WriteDebugMessage("DebugFolder=" + FileSystem.DebugFolder); Log.WriteDebugMessage("LogsFolder=" + FileSystem.LogsFolder); Log.WriteDebugMessage("CommandFile=" + FileSystem.CommandFile); Log.WriteDebugMessage("ScreenshotsFolder=" + FileSystem.ScreenshotsFolder); Log.WriteDebugMessage("ScreenshotsFile=" + FileSystem.ScreenshotsFile); Log.WriteDebugMessage("TriggersFile=" + FileSystem.TriggersFile); Log.WriteDebugMessage("ScreensFile=" + FileSystem.ScreensFile); Log.WriteDebugMessage("RegionsFile=" + FileSystem.RegionsFile); Log.WriteDebugMessage("EditorsFile=" + FileSystem.EditorsFile); Log.WriteDebugMessage("TagsFile = " + FileSystem.TagsFile); Log.WriteDebugMessage("It looks like I successfully parsed your \"" + FileSystem.ConfigFile + "\" file."); Log.WriteDebugMessage("I'm now going to attempt to load your personal settings and any screenshots you have taken."); Log.WriteMessage("Initializing screen capture"); _screenCapture = new ScreenCapture(); Log.WriteMessage("Initializing image format collection"); _imageFormatCollection = new ImageFormatCollection(); Log.WriteMessage("Initializing editor collection"); if (!_formEditor.EditorCollection.LoadXmlFileAndAddEditors()) { _screenCapture.ApplicationError = true; } Log.WriteDebugMessage("Number of editors loaded = " + _formEditor.EditorCollection.Count); Log.WriteMessage("Initializing trigger collection"); if (!_formTrigger.TriggerCollection.LoadXmlFileAndAddTriggers()) { _screenCapture.ApplicationError = true; } Log.WriteDebugMessage("Number of triggers loaded = " + _formTrigger.TriggerCollection.Count); Log.WriteMessage("Initializing region collection"); if (!_formRegion.RegionCollection.LoadXmlFileAndAddRegions(_imageFormatCollection)) { _screenCapture.ApplicationError = true; } Log.WriteDebugMessage("Number of regions loaded = " + _formRegion.RegionCollection.Count); Log.WriteMessage("Initializing screen collection"); if (!_formScreen.ScreenCollection.LoadXmlFileAndAddScreens(_imageFormatCollection)) { _screenCapture.ApplicationError = true; } Log.WriteDebugMessage("Number of screens loaded = " + _formScreen.ScreenCollection.Count); Log.WriteMessage("Initializing tag collection"); if (!_formTag.TagCollection.LoadXmlFileAndAddTags()) { _screenCapture.ApplicationError = true; } Log.WriteDebugMessage("Number of tags loaded = " + _formTag.TagCollection.Count); Log.WriteMessage("Initializing schedule collection"); if (!_formSchedule.ScheduleCollection.LoadXmlFileAndAddSchedules()) { _screenCapture.ApplicationError = true; } Log.WriteDebugMessage("Number of schedules loaded = " + _formSchedule.ScheduleCollection.Count); Log.WriteMessage("Building screens module"); BuildScreensModule(); Log.WriteMessage("Building editors module"); BuildEditorsModule(); Log.WriteMessage("Building triggers module"); BuildTriggersModule(); Log.WriteMessage("Building regions module"); BuildRegionsModule(); Log.WriteMessage("Building tags module"); BuildTagsModule(); Log.WriteMessage("Building schedules module"); BuildSchedulesModule(); Log.WriteMessage("Building screenshot preview context menu"); BuildScreenshotPreviewContextualMenu(); Log.WriteMessage("Building view tab pages"); BuildViewTabPages(); Log.WriteMessage("Initializing screenshot collection"); _screenshotCollection = new ScreenshotCollection(_imageFormatCollection, _formScreen.ScreenCollection); _screenshotCollection.LoadXmlFile(); int screenCaptureInterval = Convert.ToInt32(Settings.User.GetByKey("IntScreenCaptureInterval", DefaultSettings.IntScreenCaptureInterval).Value); Log.WriteDebugMessage("IntScreenCaptureInterval = " + screenCaptureInterval); if (screenCaptureInterval == 0) { screenCaptureInterval = DefaultSettings.IntScreenCaptureInterval; Log.WriteDebugMessage("WARNING: Screen capture interval was found to be 0 so 60,000 milliseconds (or 1 minute) is being used as the default value"); } Log.WriteDebugMessage("Assigning screen capture interval value to its appropriate hour, minute, second, and millisecond variables"); decimal screenCaptureIntervalHours = Convert.ToDecimal(TimeSpan.FromMilliseconds(Convert.ToDouble(screenCaptureInterval)).Hours); Log.WriteDebugMessage("Hours = " + screenCaptureIntervalHours); decimal screenCaptureIntervalMinutes = Convert.ToDecimal(TimeSpan.FromMilliseconds(Convert.ToDouble(screenCaptureInterval)).Minutes); Log.WriteDebugMessage("Minutes = " + screenCaptureIntervalMinutes); decimal screenCaptureIntervalSeconds = Convert.ToDecimal(TimeSpan.FromMilliseconds(Convert.ToDouble(screenCaptureInterval)).Seconds); Log.WriteDebugMessage("Seconds = " + screenCaptureIntervalSeconds); decimal screenCaptureIntervalMilliseconds = Convert.ToDecimal(TimeSpan.FromMilliseconds(Convert.ToDouble(screenCaptureInterval)).Milliseconds); Log.WriteDebugMessage("Milliseconds = " + screenCaptureIntervalMilliseconds); numericUpDownHoursInterval.Value = screenCaptureIntervalHours; numericUpDownMinutesInterval.Value = screenCaptureIntervalMinutes; numericUpDownSecondsInterval.Value = screenCaptureIntervalSeconds; numericUpDownMillisecondsInterval.Value = screenCaptureIntervalMilliseconds; numericUpDownCaptureLimit.Value = Convert.ToInt32(Settings.User.GetByKey("IntCaptureLimit", DefaultSettings.IntCaptureLimit).Value); Log.WriteDebugMessage("IntCaptureLimit = " + numericUpDownCaptureLimit.Value); checkBoxCaptureLimit.Checked = Convert.ToBoolean(Settings.User.GetByKey("BoolCaptureLimit", DefaultSettings.BoolCaptureLimit).Value); Log.WriteDebugMessage("BoolCaptureLimit = " + checkBoxCaptureLimit.Checked); checkBoxInitialScreenshot.Checked = Convert.ToBoolean(Settings.User.GetByKey("BoolTakeInitialScreenshot", DefaultSettings.BoolTakeInitialScreenshot).Value); Log.WriteDebugMessage("BoolTakeInitialScreenshot = " + checkBoxInitialScreenshot.Checked); notifyIcon.Visible = Convert.ToBoolean(Settings.User.GetByKey("BoolShowSystemTrayIcon", DefaultSettings.BoolShowSystemTrayIcon).Value); Log.WriteDebugMessage("BoolShowSystemTrayIcon = " + notifyIcon.Visible); numericUpDownKeepScreenshotsForDays.Value = Convert.ToDecimal(Settings.User.GetByKey("IntKeepScreenshotsForDays", DefaultSettings.IntKeepScreenshotsForDays).Value); Log.WriteDebugMessage("IntKeepScreenshotsForDays = " + numericUpDownKeepScreenshotsForDays.Value); comboBoxScreenshotLabel.Text = Settings.User.GetByKey("StringScreenshotLabel", DefaultSettings.StringScreenshotLabel).Value.ToString(); Log.WriteDebugMessage("StringScreenshotLabel = " + comboBoxScreenshotLabel.Text); checkBoxScreenshotLabel.Checked = Convert.ToBoolean(Settings.User.GetByKey("BoolApplyScreenshotLabel", DefaultSettings.BoolApplyScreenshotLabel).Value); // The user can compare the current Active Window Title text to compare against what the text they've defined. checkBoxActiveWindowTitle.Checked = Convert.ToBoolean(Settings.User.GetByKey("BoolActiveWindowTitleCaptureCheck", DefaultSettings.BoolActiveWindowTitleCaptureCheck).Value); textBoxActiveWindowTitle.Text = Settings.User.GetByKey("StringActiveWindowTitleCaptureText", DefaultSettings.StringActiveWindowTitleCaptureText).Value.ToString(); // Region Select / Auto Save textBoxAutoSaveFolder.Text = Settings.User.GetByKey("StringAutoSaveFolder", DefaultSettings.StringAutoSaveFolder).Value.ToString(); textBoxAutoSaveMacro.Text = Settings.User.GetByKey("StringAutoSaveMacro", DefaultSettings.StringAutoSaveMacro).Value.ToString(); EnableStartCapture(); CaptureLimitCheck(); Log.WriteDebugMessage("Settings loaded"); } catch (Exception ex) { _screenCapture.ApplicationError = true; Log.WriteExceptionMessage("FormMain-Settings::LoadSettings", ex); } }
private void buttonApplicationFocusTest_Click(object sender, EventArgs e) { ScreenCapture.SetApplicationFocus(comboBoxProcessList.Text); }