private void AddNewScreen() { if (InputValid()) { TrimInput(); if (ScreenCollection.GetByName(textBoxName.Text) == null) { ScreenCollection.Add(new Screen( textBoxName.Text, FileSystem.CorrectScreenshotsFolderPath(textBoxFolder.Text), textBoxMacro.Text, comboBoxScreenComponent.SelectedIndex, ImageFormatCollection.GetByName(comboBoxFormat.Text), (int)numericUpDownJpegQuality.Value, (int)numericUpDownResolutionRatio.Value, checkBoxMouse.Checked)); Okay(); } else { MessageBox.Show("A screen with this name already exists.", "Duplicate Name Conflict", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show("Please enter valid input for each field.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private bool SaveScreenshot(Bitmap bitmap, Region region) { if (bitmap == null) { return(false); } Screenshot screenshot = new Screenshot(_screenCapture.ActiveWindowTitle, _screenCapture.DateTimeScreenshotsTaken) { ViewId = region.ViewId, Path = FileSystem.CorrectScreenshotsFolderPath(MacroParser.ParseTags(config: false, region.Folder, _formMacroTag.MacroTagCollection)) + MacroParser.ParseTags(preview: false, config: false, region.Name, region.Macro, -1, region.Format, _screenCapture.ActiveWindowTitle, _formMacroTag.MacroTagCollection), Bitmap = bitmap, Format = region.Format, ProcessName = _screenCapture.ActiveWindowProcessName + ".exe", Label = checkBoxScreenshotLabel.Checked ? comboBoxScreenshotLabel.Text : string.Empty }; if (_screenCapture.SaveScreenshot(region.JpegQuality, screenshot, _screenshotCollection)) { ScreenshotTakenWithSuccess(); return(true); } else { ScreenshotTakenWithFailure(); return(false); } }
/// <summary> /// Saves the screens. /// </summary> public void Save() { try { XmlWriterSettings xSettings = new XmlWriterSettings(); xSettings.Indent = true; xSettings.CloseOutput = true; xSettings.CheckCharacters = true; xSettings.Encoding = Encoding.UTF8; xSettings.NewLineChars = Environment.NewLine; xSettings.IndentChars = XML_FILE_INDENT_CHARS; xSettings.NewLineHandling = NewLineHandling.Entitize; xSettings.ConformanceLevel = ConformanceLevel.Document; if (File.Exists(FileSystem.ScreensFile)) { File.Delete(FileSystem.ScreensFile); } using (XmlWriter xWriter = XmlWriter.Create(FileSystem.ScreensFile, xSettings)) { xWriter.WriteStartDocument(); xWriter.WriteStartElement(XML_FILE_ROOT_NODE); xWriter.WriteAttributeString("app", "version", XML_FILE_ROOT_NODE, Settings.ApplicationVersion); xWriter.WriteAttributeString("app", "codename", XML_FILE_ROOT_NODE, Settings.ApplicationCodename); xWriter.WriteStartElement(XML_FILE_SCREENS_NODE); foreach (object obj in _screenList) { Screen screen = (Screen)obj; xWriter.WriteStartElement(XML_FILE_SCREEN_NODE); xWriter.WriteElementString(SCREEN_VIEWID, screen.ViewId.ToString()); xWriter.WriteElementString(SCREEN_NAME, screen.Name); xWriter.WriteElementString(SCREEN_FOLDER, FileSystem.CorrectScreenshotsFolderPath(screen.Folder)); xWriter.WriteElementString(SCREEN_MACRO, screen.Macro); xWriter.WriteElementString(SCREEN_COMPONENT, screen.Component.ToString()); xWriter.WriteElementString(SCREEN_FORMAT, screen.Format.Name); xWriter.WriteElementString(SCREEN_JPEG_QUALITY, screen.JpegQuality.ToString()); xWriter.WriteElementString(SCREEN_RESOLUTION_RATIO, screen.ResolutionRatio.ToString()); xWriter.WriteElementString(SCREEN_MOUSE, screen.Mouse.ToString()); xWriter.WriteEndElement(); } xWriter.WriteEndElement(); xWriter.WriteEndElement(); xWriter.WriteEndDocument(); xWriter.Flush(); xWriter.Close(); } } catch (Exception ex) { Log.Write("ScreenCollection::Save", ex); } }
private void RunRegionCaptures() { try { foreach (Region region in _formRegion.RegionCollection) { if (region.Active) { MacroParser.screenCapture = _screenCapture; if (!string.IsNullOrEmpty(_screenCapture.ActiveWindowTitle)) { // Do not contiune if the active window title needs to be checked and the active window title // does not contain the text defined in "Active Window Title Capture Text" and CaptureNow is false. // CaptureNow could be set to "true" during a "Capture Now / Archive" or "Capture Now / Edit" option // so, in that case, we want to capture the screen and save the screenshot regardless of the title text. if (checkBoxActiveWindowTitle.Checked && !string.IsNullOrEmpty(textBoxActiveWindowTitle.Text) && !_screenCapture.ActiveWindowTitle.ToLower().Contains(textBoxActiveWindowTitle.Text.ToLower()) && !_screenCapture.CaptureNow) { return; } _screenCapture.CaptureNow = false; if (_screenCapture.GetScreenImages(-1, region.X, region.Y, region.Width, region.Height, region.Mouse, region.ResolutionRatio, out Bitmap bitmap)) { if (_screenCapture.SaveScreenshot( path: FileSystem.CorrectScreenshotsFolderPath(MacroParser.ParseTags(config: false, region.Folder, _formTag.TagCollection)) + MacroParser.ParseTags(preview: false, config: false, region.Name, region.Macro, -1, region.Format, _screenCapture.ActiveWindowTitle, _formTag.TagCollection), format: region.Format, component: -1, screenshotType: ScreenshotType.Region, jpegQuality: region.JpegQuality, viewId: region.ViewId, bitmap: bitmap, label: checkBoxScreenshotLabel.Checked ? comboBoxScreenshotLabel.Text : string.Empty, windowTitle: _screenCapture.ActiveWindowTitle, processName: _screenCapture.ActiveWindowProcessName, screenshotCollection: _screenshotCollection )) { ScreenshotTakenWithSuccess(); } else { ScreenshotTakenWithFailure(); } } } } } } catch (Exception ex) { _screenCapture.ApplicationError = true; Log.WriteExceptionMessage("FormMain-Regions::RunRegionCaptures", ex); } }
private void RunRegionCaptures() { try { Log.WriteDebugMessage(":: RunRegionCaptures Start ::"); foreach (Region region in formRegion.RegionCollection) { if (region.Active) { MacroParser.screenCapture = _screenCapture; if (!string.IsNullOrEmpty(_screenCapture.ActiveWindowTitle)) { // Do not contiune if the active window title needs to be checked and the active window title // does not contain the text defined in "Active Window Title Capture Text". if (region.ActiveWindowTitleCaptureCheck && !string.IsNullOrEmpty(region.ActiveWindowTitleCaptureText) && !_screenCapture.ActiveWindowTitle.ToLower().Contains(region.ActiveWindowTitleCaptureText.ToLower())) { return; } if (_screenCapture.GetScreenImages(-1, region.X, region.Y, region.Width, region.Height, region.Mouse, region.ResolutionRatio, out Bitmap bitmap)) { if (_screenCapture.SaveScreenshot( path: FileSystem.CorrectScreenshotsFolderPath(MacroParser.ParseTags(region.Folder, formTag.TagCollection)) + MacroParser.ParseTags(preview: false, region.Name, region.Macro, -1, region.Format, _screenCapture.ActiveWindowTitle, formTag.TagCollection), format: region.Format, component: -1, screenshotType: ScreenshotType.Region, jpegQuality: region.JpegQuality, viewId: region.ViewId, bitmap: bitmap, label: checkBoxScreenshotLabel.Checked ? comboBoxScreenshotLabel.Text : string.Empty, windowTitle: _screenCapture.ActiveWindowTitle, processName: _screenCapture.ActiveWindowProcessName, screenshotCollection: _screenshotCollection )) { ScreenshotTakenWithSuccess(); } else { ScreenshotTakenWithFailure(); } } } } } Log.WriteDebugMessage(":: RunRegionCaptures End ::"); } catch (Exception ex) { Log.WriteExceptionMessage("FormMain-Regions::RunRegionCaptures", ex); } }
/// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="folder"></param> /// <param name="macro"></param> /// <param name="component"></param> /// <param name="format"></param> /// <param name="jpegQuality"></param> /// <param name="resolutionRatio"></param> /// <param name="mouse"></param> public Screen(string name, string folder, string macro, int component, ImageFormat format, int jpegQuality, int resolutionRatio, bool mouse) { ViewId = Guid.NewGuid(); Name = name; Folder = FileSystem.CorrectScreenshotsFolderPath(folder); Macro = macro; Component = component; Format = format; JpegQuality = jpegQuality; ResolutionRatio = resolutionRatio; Mouse = mouse; }
/// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="folder"></param> /// <param name="macro"></param> /// <param name="format"></param> /// <param name="jpegQuality"></param> /// <param name="resolutionRatio"></param> /// <param name="mouse"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="width"></param> /// <param name="height"></param> public Region(string name, string folder, string macro, ImageFormat format, int jpegQuality, int resolutionRatio, bool mouse, int x, int y, int width, int height) { ViewId = Guid.NewGuid(); Name = name; Folder = FileSystem.CorrectScreenshotsFolderPath(folder); Macro = macro; Format = format; JpegQuality = jpegQuality; ResolutionRatio = resolutionRatio; Mouse = mouse; X = x; Y = y; Width = width; Height = height; }
private void ChangeRegion() { if (InputValid()) { if (NameChanged() || InputChanged()) { TrimInput(); if (RegionCollection.GetByName(textBoxName.Text) != null && NameChanged()) { MessageBox.Show("A region with this name already exists.", "Duplicate Name Conflict", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { RegionCollection.Get(RegionObject).Name = textBoxName.Text; RegionCollection.Get(RegionObject).Folder = FileSystem.CorrectScreenshotsFolderPath(textBoxFolder.Text); RegionCollection.Get(RegionObject).Macro = textBoxMacro.Text; RegionCollection.Get(RegionObject).Format = ImageFormatCollection.GetByName(comboBoxFormat.Text); RegionCollection.Get(RegionObject).JpegQuality = (int)numericUpDownJpegQuality.Value; RegionCollection.Get(RegionObject).ResolutionRatio = (int)numericUpDownResolutionRatio.Value; RegionCollection.Get(RegionObject).Mouse = checkBoxMouse.Checked; RegionCollection.Get(RegionObject).X = (int)numericUpDownX.Value; RegionCollection.Get(RegionObject).Y = (int)numericUpDownY.Value; RegionCollection.Get(RegionObject).Width = (int)numericUpDownWidth.Value; RegionCollection.Get(RegionObject).Height = (int)numericUpDownHeight.Value; RegionCollection.Get(RegionObject).Active = checkBoxActive.Checked; RegionCollection.Get(RegionObject).ActiveWindowTitleCaptureCheck = checkBoxActiveWindowTitle.Checked; RegionCollection.Get(RegionObject).ActiveWindowTitleCaptureText = textBoxActiveWindowTitle.Text; Okay(); } } else { Close(); } } else { MessageBox.Show("Please enter valid input for each field.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void AddScreen() { if (InputValid()) { TrimInput(); if (ScreenCollection.GetByName(textBoxScreenName.Text) == null) { ScreenCollection.Add(new Screen() { ViewId = Guid.NewGuid(), Name = textBoxScreenName.Text, Folder = FileSystem.CorrectScreenshotsFolderPath(textBoxFolder.Text), Macro = textBoxMacro.Text, Component = comboBoxScreenComponent.SelectedIndex, Format = ImageFormatCollection.GetByName(comboBoxFormat.Text), JpegQuality = (int)numericUpDownJpegQuality.Value, ResolutionRatio = (int)numericUpDownResolutionRatio.Value, Mouse = checkBoxMouse.Checked, Active = checkBoxActive.Checked, X = (int)numericUpDownX.Value, Y = (int)numericUpDownY.Value, Width = (int)numericUpDownWidth.Value, Height = (int)numericUpDownHeight.Value, Source = comboBoxScreenSource.SelectedIndex }); Okay(); } else { MessageBox.Show("A screen with this name already exists.", "Duplicate Name Conflict", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show("Please enter valid input for each field.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// The event method used by "Region Select / Auto Save". /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _formRegionSelectWithMouse_RegionSelectAutoSaveMouseSelectionCompleted(object sender, EventArgs e) { int x = _formRegionSelectWithMouse.outputX + 1; int y = _formRegionSelectWithMouse.outputY + 1; int width = _formRegionSelectWithMouse.outputWidth - 2; int height = _formRegionSelectWithMouse.outputHeight - 2; string autoSaveFolder = textBoxAutoSaveFolder.Text; string autoSaveMacro = textBoxAutoSaveMacro.Text; ImageFormat imageFormat = new ImageFormat(ImageFormatSpec.NAME_JPEG, ImageFormatSpec.EXTENSION_JPEG); if (_screenCapture.GetScreenImages(-1, x, y, width, height, mouse: false, resolutionRatio: 100, out Bitmap bitmap)) { DateTime dtNow = DateTime.Now; _screenCapture.DateTimeScreenshotsTaken = dtNow; _screenCapture.ActiveWindowTitle = "*** Auto Screen Capture - Region Select / Auto Save ***"; if (_screenCapture.SaveScreenshot( path: FileSystem.CorrectScreenshotsFolderPath(MacroParser.ParseTags(config: false, autoSaveFolder, _formTag.TagCollection)) + MacroParser.ParseTags(preview: false, config: false, DateTime.Now.ToString(MacroParser.DateFormat), autoSaveMacro, -1, imageFormat, _screenCapture.ActiveWindowTitle, _formTag.TagCollection), format: imageFormat, component: -1, screenshotType: ScreenshotType.Region, jpegQuality: 100, viewId: new Guid(), bitmap: bitmap, label: checkBoxScreenshotLabel.Checked ? comboBoxScreenshotLabel.Text : string.Empty, windowTitle: _screenCapture.ActiveWindowTitle, processName: _screenCapture.ActiveWindowProcessName, screenshotCollection: _screenshotCollection )) { ScreenshotTakenWithSuccess(); } else { ScreenshotTakenWithFailure(); } } }
private void AddNewRegion() { if (InputValid()) { TrimInput(); if (RegionCollection.GetByName(textBoxName.Text) == null) { RegionCollection.Add(new Region() { Name = textBoxName.Text, Folder = FileSystem.CorrectScreenshotsFolderPath(textBoxFolder.Text), Macro = textBoxMacro.Text, Format = ImageFormatCollection.GetByName(comboBoxFormat.Text), JpegQuality = (int)numericUpDownJpegQuality.Value, ResolutionRatio = (int)numericUpDownResolutionRatio.Value, Mouse = checkBoxMouse.Checked, X = (int)numericUpDownX.Value, Y = (int)numericUpDownY.Value, Width = (int)numericUpDownWidth.Value, Height = (int)numericUpDownHeight.Value, Active = checkBoxActive.Checked, ActiveWindowTitleCaptureCheck = checkBoxActiveWindowTitle.Checked, ActiveWindowTitleCaptureText = textBoxActiveWindowTitle.Text }); Okay(); } else { MessageBox.Show("A region with this name already exists.", "Duplicate Name Conflict", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show("Please enter valid input for each field.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void ChangeScreen() { if (InputValid()) { if (NameChanged() || InputChanged()) { TrimInput(); if (ScreenCollection.GetByName(textBoxScreenName.Text) != null && NameChanged()) { MessageBox.Show("A screen with this name already exists.", "Duplicate Name Conflict", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { ScreenCollection.Get(ScreenObject).Name = textBoxScreenName.Text; ScreenCollection.Get(ScreenObject).Folder = FileSystem.CorrectScreenshotsFolderPath(textBoxFolder.Text); ScreenCollection.Get(ScreenObject).Macro = textBoxMacro.Text; ScreenCollection.Get(ScreenObject).Component = comboBoxScreenComponent.SelectedIndex; ScreenCollection.Get(ScreenObject).Format = ImageFormatCollection.GetByName(comboBoxFormat.Text); ScreenCollection.Get(ScreenObject).JpegQuality = (int)numericUpDownJpegQuality.Value; ScreenCollection.Get(ScreenObject).ResolutionRatio = (int)numericUpDownResolutionRatio.Value; ScreenCollection.Get(ScreenObject).Mouse = checkBoxMouse.Checked; ScreenCollection.Get(ScreenObject).Active = checkBoxActive.Checked; Okay(); } } else { Close(); } } else { MessageBox.Show("Please enter valid input for each field.", "Invalid Input", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void FormScreen_Load(object sender, EventArgs e) { textBoxScreenName.Focus(); HelpMessage("This is where to configure a screen capture. Select a source, component, and capture method then adjust the display properties and image attributes"); _toolTip.SetToolTip(checkBoxMouse, "You can include the mouse pointer in your screenshots if the \"Include mouse pointer\" option is checked"); _toolTip.SetToolTip(comboBoxFormat, "Change the image format for the screenshots taken by this screen capture. JPEG is the recommended image format"); _toolTip.SetToolTip(checkBoxEnable, "You can capture this screen if Enable is checked (turned on)"); _toolTip.SetToolTip(buttonScreenBrowseFolder, "Browse for a folder where screenshots of this screen capture will be saved to"); _toolTip.SetToolTip(buttonMacroTags, "Open a list of available macro tags. You can keep the Macro Tags window open while you modify your filename pattern in the Macro field"); _toolTip.SetToolTip(checkBoxAutoAdapt, "The position and size will automatically adjust based on changes to your display setup"); _toolTip.SetToolTip(checkBoxEncrypt, "Screenshots can be encrypted so only you can view each screenshot with Auto Screen Capture"); comboBoxFormat.Items.Clear(); labelScreenSource.Enabled = true; labelScreenComponent.Enabled = true; comboBoxScreenSource.Enabled = true; comboBoxScreenComponent.Enabled = true; labelX.Enabled = true; labelY.Enabled = true; labelWidth.Enabled = true; labelHeight.Enabled = true; numericUpDownX.Enabled = true; numericUpDownY.Enabled = true; numericUpDownWidth.Enabled = true; numericUpDownHeight.Enabled = true; pictureBoxPreview.Image = null; foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } comboBoxScreenSource.Items.Clear(); comboBoxScreenSource.Items.Add("Auto Screen Capture"); comboBoxScreenSource.Items.Add("EnumDisplaySettings (user32.dll)"); comboBoxScreenSource.Items.Add("System.Windows.Forms.Screen (.NET)"); comboBoxScreenCaptureMethod.Items.Clear(); comboBoxScreenCaptureMethod.Items.Add("System.Drawing.Graphics.CopyFromScreen (.NET)"); comboBoxScreenCaptureMethod.Items.Add("BitBlt (gdi32.dll)"); if (ScreenObject != null) { Text = "Configure Screen"; textBoxScreenName.Text = ScreenObject.Name; textBoxFolder.Text = _fileSystem.CorrectScreenshotsFolderPath(ScreenObject.Folder); textBoxMacro.Text = ScreenObject.Macro; comboBoxScreenSource.SelectedIndex = ScreenObject.Source; comboBoxScreenCaptureMethod.SelectedIndex = ScreenObject.CaptureMethod; comboBoxFormat.SelectedItem = ScreenObject.Format.Name; numericUpDownJpegQuality.Value = ScreenObject.JpegQuality; checkBoxMouse.Checked = ScreenObject.Mouse; checkBoxEnable.Checked = ScreenObject.Enable; numericUpDownX.Value = ScreenObject.X; numericUpDownY.Value = ScreenObject.Y; numericUpDownWidth.Value = ScreenObject.Width; numericUpDownHeight.Value = ScreenObject.Height; // AutoAdapt _autoAdaptIndex = ScreenObject.AutoAdaptIndex; checkBoxAutoAdapt.Checked = ScreenObject.AutoAdapt; checkBoxEncrypt.Checked = ScreenObject.Encrypt; } else { Text = "Add Screen"; textBoxScreenName.Text = "Screen " + (ScreenCollection.Count + 1); textBoxFolder.Text = _fileSystem.ScreenshotsFolder; textBoxMacro.Text = _fileSystem.FilenamePattern; comboBoxScreenSource.SelectedIndex = 0; comboBoxScreenCaptureMethod.SelectedIndex = 0; comboBoxFormat.SelectedItem = ScreenCapture.ImageFormat; numericUpDownJpegQuality.Value = 100; checkBoxMouse.Checked = true; checkBoxEnable.Checked = true; numericUpDownX.Value = 0; numericUpDownY.Value = 0; numericUpDownWidth.Value = 0; numericUpDownHeight.Value = 0; // AutoAdapt int nextAdaptIndexToUseForNewScreen = 0; foreach (Screen screen in ScreenCollection) { if (screen.AutoAdapt) { nextAdaptIndexToUseForNewScreen++; } } _autoAdaptIndex = nextAdaptIndexToUseForNewScreen; checkBoxAutoAdapt.Checked = false; checkBoxEncrypt.Checked = false; } UpdatePreviewMacro(); UpdatePreviewImage(_screenCapture); }
private void FormScreen_Load(object sender, EventArgs e) { comboBoxFormat.Items.Clear(); comboBoxScreenComponent.Items.Clear(); comboBoxTags.DataSource = null; pictureBoxPreview.Image = null; // *** Macro Tags *** comboBoxTags.DisplayMember = "Description"; comboBoxTags.ValueMember = "Name"; comboBoxTags.DataSource = MacroTagCollection.GetList(); // ****************** foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } comboBoxScreenComponent.Items.Add("Active Window"); for (int i = 1; i <= ScreenDictionary.Count; i++) { System.Windows.Forms.Screen screen = ScreenDictionary[i]; comboBoxScreenComponent.Items.Add("Screen " + i + " (" + screen.Bounds.Width + " x " + screen.Bounds.Height + ")"); } if (ScreenObject != null) { Text = "Change Screen"; textBoxName.Text = ScreenObject.Name; textBoxFolder.Text = FileSystem.CorrectScreenshotsFolderPath(ScreenObject.Folder); textBoxMacro.Text = ScreenObject.Macro; if (ScreenObject.Component < comboBoxScreenComponent.Items.Count) { SetControls(enabled: true); comboBoxScreenComponent.SelectedIndex = ScreenObject.Component; } else { SetControls(enabled: false); } comboBoxFormat.SelectedItem = ScreenObject.Format.Name; numericUpDownJpegQuality.Value = ScreenObject.JpegQuality; numericUpDownResolutionRatio.Value = ScreenObject.ResolutionRatio; checkBoxMouse.Checked = ScreenObject.Mouse; } else { Text = "Add New Screen"; textBoxName.Text = "Screen " + (ScreenCollection.Count + 1); textBoxFolder.Text = FileSystem.ScreenshotsFolder; textBoxMacro.Text = MacroParser.DefaultMacro; comboBoxScreenComponent.SelectedIndex = 0; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; numericUpDownResolutionRatio.Value = 100; checkBoxMouse.Checked = true; } timerScreenPreview.Enabled = true; }
private void FormRegion_Load(object sender, EventArgs e) { textBoxName.Focus(); HelpMessage("This is where to configure a region capture. Change the X, Y, Width, and Height properties while watching Preview"); ScreenDictionary.Clear(); comboBoxScreenTemplate.Items.Clear(); int component = 1; foreach (System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens) { ScreenDictionary.Add(component, screen); component++; } // *** Screen Template *** comboBoxScreenTemplate.Items.Add(string.Empty); for (int i = 1; i <= ScreenDictionary.Count; i++) { System.Windows.Forms.Screen screen = ScreenDictionary[i]; comboBoxScreenTemplate.Items.Add("Screen " + i + " (" + screen.Bounds.Width + " x " + screen.Bounds.Height + ")"); } comboBoxScreenTemplate.SelectedIndex = 0; // *********************** comboBoxFormat.Items.Clear(); foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } if (RegionObject != null) { Text = "Change Region"; textBoxName.Text = RegionObject.Name; textBoxFolder.Text = FileSystem.CorrectScreenshotsFolderPath(RegionObject.Folder); textBoxMacro.Text = RegionObject.Macro; comboBoxFormat.SelectedItem = RegionObject.Format.Name; numericUpDownJpegQuality.Value = RegionObject.JpegQuality; numericUpDownResolutionRatio.Value = RegionObject.ResolutionRatio; checkBoxMouse.Checked = RegionObject.Mouse; numericUpDownX.Value = RegionObject.X; numericUpDownY.Value = RegionObject.Y; numericUpDownWidth.Value = RegionObject.Width; numericUpDownHeight.Value = RegionObject.Height; checkBoxActive.Checked = RegionObject.Active; checkBoxActiveWindowTitle.Checked = RegionObject.ActiveWindowTitleCaptureCheck; textBoxActiveWindowTitle.Text = RegionObject.ActiveWindowTitleCaptureText; } else { Text = "Add New Region"; textBoxName.Text = "Region " + (RegionCollection.Count + 1); textBoxFolder.Text = FileSystem.ScreenshotsFolder; textBoxMacro.Text = MacroParser.DefaultMacro; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; numericUpDownResolutionRatio.Value = 100; checkBoxMouse.Checked = true; numericUpDownX.Value = 0; numericUpDownY.Value = 0; numericUpDownWidth.Value = 800; numericUpDownHeight.Value = 600; checkBoxActive.Checked = true; checkBoxActiveWindowTitle.Checked = false; textBoxActiveWindowTitle.Text = string.Empty; } UpdatePreviewMacro(); UpdatePreviewImage(ScreenCapture); }
/// <summary> /// Loads the regions. /// </summary> public void LoadXmlFileAndAddRegions(ImageFormatCollection imageFormatCollection) { try { Log.WriteDebugMessage(":: LoadXmlFileAndAddRegions Start ::"); if (FileSystem.FileExists(FileSystem.RegionsFile)) { Log.WriteDebugMessage("Regions file \"" + FileSystem.RegionsFile + "\" found. Attempting to load XML document"); XmlDocument xDoc = new XmlDocument(); xDoc.Load(FileSystem.RegionsFile); Log.WriteDebugMessage("XML document loaded"); AppVersion = xDoc.SelectSingleNode("/autoscreen").Attributes["app:version"]?.Value; AppCodename = xDoc.SelectSingleNode("/autoscreen").Attributes["app:codename"]?.Value; XmlNodeList xRegions = xDoc.SelectNodes(REGION_XPATH); foreach (XmlNode xRegion in xRegions) { Region region = new Region(); XmlNodeReader xReader = new XmlNodeReader(xRegion); while (xReader.Read()) { if (xReader.IsStartElement() && !xReader.IsEmptyElement) { switch (xReader.Name) { case REGION_VIEWID: xReader.Read(); region.ViewId = Guid.Parse(xReader.Value); break; case REGION_NAME: xReader.Read(); region.Name = xReader.Value; break; case REGION_FOLDER: xReader.Read(); region.Folder = xReader.Value; break; case REGION_MACRO: xReader.Read(); region.Macro = xReader.Value; break; case REGION_FORMAT: xReader.Read(); region.Format = imageFormatCollection.GetByName(xReader.Value); break; case REGION_JPEG_QUALITY: xReader.Read(); region.JpegQuality = Convert.ToInt32(xReader.Value); break; case REGION_RESOLUTION_RATIO: xReader.Read(); region.ResolutionRatio = Convert.ToInt32(xReader.Value); break; case REGION_MOUSE: xReader.Read(); region.Mouse = Convert.ToBoolean(xReader.Value); break; case REGION_X: xReader.Read(); region.X = Convert.ToInt32(xReader.Value); break; case REGION_Y: xReader.Read(); region.Y = Convert.ToInt32(xReader.Value); break; case REGION_WIDTH: xReader.Read(); region.Width = Convert.ToInt32(xReader.Value); break; case REGION_HEIGHT: xReader.Read(); region.Height = Convert.ToInt32(xReader.Value); break; case REGION_ACTIVE: xReader.Read(); region.Active = Convert.ToBoolean(xReader.Value); break; case REGION_ACTIVE_WINDOW_TITLE_CAPTURE_CHECK: xReader.Read(); region.ActiveWindowTitleCaptureCheck = Convert.ToBoolean(xReader.Value); break; case REGION_ACTIVE_WINDOW_TITLE_CAPTURE_TEXT: xReader.Read(); region.ActiveWindowTitleCaptureText = xReader.Value; break; } } } xReader.Close(); // Change the data for each region 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 regions file was detected. Attempting upgrade to new region schema"); Version v2182 = Settings.VersionManager.Versions.Get("Clara", "2.1.8.2"); Version v2300 = Settings.VersionManager.Versions.Get("Boombayah", "2.3.0.0"); Version configVersion = Settings.VersionManager.Versions.Get(AppCodename, AppVersion); if (v2182 != null && string.IsNullOrEmpty(AppCodename) && string.IsNullOrEmpty(AppVersion)) { Log.WriteDebugMessage("Clara 2.1.8.2 or older detected"); region.ViewId = Guid.NewGuid(); // Get the screenshots folder path from the old user settings to be used for the region's folder property. region.Folder = Settings.VersionManager.OldUserSettings.GetByKey("ScreenshotsDirectory", FileSystem.ScreenshotsFolder).Value.ToString(); region.Folder = FileSystem.CorrectScreenshotsFolderPath(region.Folder); // 2.1 used "%region%", but 2.2 uses "%name%" for a region's Macro value. region.Macro = region.Macro.Replace("%region%", "%name%"); region.Format = imageFormatCollection.GetByName(ImageFormatSpec.NAME_JPEG); region.JpegQuality = 100; region.ResolutionRatio = 100; region.Mouse = true; region.Active = true; } 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. region.Active = true; } } if (!string.IsNullOrEmpty(region.Name)) { Add(region); } } // Write out the regions to the XML document now that we've updated the region objects // with their appropriate property values if it was an old version of the application. if (Settings.VersionManager.IsOldAppVersion(AppCodename, AppVersion)) { Log.WriteDebugMessage("Regions file detected as an old version"); SaveToXmlFile(); } } else { Log.WriteDebugMessage($"WARNING: {FileSystem.RegionsFile} not found. Unable to load regions"); SaveToXmlFile(); } Log.WriteDebugMessage(":: LoadXmlFileAndAddRegions End ::"); } catch (Exception ex) { Log.WriteExceptionMessage("RegionCollection::Load", ex); } }
/// <summary> /// Loads the regions. /// </summary> public bool LoadXmlFileAndAddRegions(ImageFormatCollection imageFormatCollection, Config config, FileSystem fileSystem, Log log) { try { if (fileSystem.FileExists(fileSystem.RegionsFile)) { log.WriteDebugMessage("Regions file \"" + fileSystem.RegionsFile + "\" found. Attempting to load XML document"); XmlDocument xDoc = new XmlDocument(); xDoc.Load(fileSystem.RegionsFile); log.WriteDebugMessage("XML document loaded"); AppVersion = xDoc.SelectSingleNode("/autoscreen").Attributes["app:version"]?.Value; AppCodename = xDoc.SelectSingleNode("/autoscreen").Attributes["app:codename"]?.Value; XmlNodeList xRegions = xDoc.SelectNodes(REGION_XPATH); foreach (XmlNode xRegion in xRegions) { Region region = new Region(); XmlNodeReader xReader = new XmlNodeReader(xRegion); while (xReader.Read()) { if (xReader.IsStartElement() && !xReader.IsEmptyElement) { switch (xReader.Name) { case REGION_VIEWID: xReader.Read(); region.ViewId = Guid.Parse(xReader.Value); break; case REGION_NAME: xReader.Read(); region.Name = xReader.Value; break; case REGION_FOLDER: xReader.Read(); region.Folder = xReader.Value; break; case REGION_MACRO: xReader.Read(); region.Macro = xReader.Value; break; case REGION_FORMAT: xReader.Read(); region.Format = imageFormatCollection.GetByName(xReader.Value); break; case REGION_JPEG_QUALITY: xReader.Read(); region.JpegQuality = Convert.ToInt32(xReader.Value); break; case REGION_MOUSE: xReader.Read(); region.Mouse = Convert.ToBoolean(xReader.Value); break; case REGION_X: xReader.Read(); region.X = Convert.ToInt32(xReader.Value); break; case REGION_Y: xReader.Read(); region.Y = Convert.ToInt32(xReader.Value); break; case REGION_WIDTH: xReader.Read(); region.Width = Convert.ToInt32(xReader.Value); break; case REGION_HEIGHT: xReader.Read(); region.Height = Convert.ToInt32(xReader.Value); break; case REGION_ENABLE: case "active": // Any version older than 2.4.0.0 used "active" instead of "enable". xReader.Read(); region.Enable = Convert.ToBoolean(xReader.Value); break; case REGION_ENCRYPT: xReader.Read(); region.Encrypt = Convert.ToBoolean(xReader.Value); break; } } } xReader.Close(); // Change the data for each region that's being loaded if we've detected that // the XML document is from an older version of the application. if (config.Settings.VersionManager.IsOldAppVersion(config.Settings, AppCodename, AppVersion)) { log.WriteDebugMessage("An old version of the regions file was detected. Attempting upgrade to new region schema"); Version v2182 = config.Settings.VersionManager.Versions.Get(Settings.CODENAME_CLARA, Settings.CODEVERSION_CLARA); Version v2300 = config.Settings.VersionManager.Versions.Get(Settings.CODENAME_BOOMBAYAH, Settings.CODEVERSION_BOOMBAYAH); Version v2338 = config.Settings.VersionManager.Versions.Get(Settings.CODENAME_BOOMBAYAH, "2.3.3.8"); Version configVersion = config.Settings.VersionManager.Versions.Get(AppCodename, AppVersion); if (v2182 != null && string.IsNullOrEmpty(AppCodename) && string.IsNullOrEmpty(AppVersion)) { log.WriteDebugMessage("Clara 2.1.8.2 or older detected"); region.ViewId = Guid.NewGuid(); // Get the screenshots folder path from the old user settings to be used for the region's folder property. region.Folder = config.Settings.VersionManager.OldUserSettings.GetByKey("ScreenshotsDirectory", fileSystem.ScreenshotsFolder).Value.ToString(); region.Folder = fileSystem.CorrectScreenshotsFolderPath(region.Folder); // 2.1 used "%region%", but 2.2 uses "%name%" for a region's Macro value. region.Macro = region.Macro.Replace("%region%", "%name%"); region.Format = imageFormatCollection.GetByName("JPEG"); region.JpegQuality = 100; region.Mouse = true; region.Enable = true; region.Encrypt = false; } 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. region.Enable = true; // Introduced in 2.4.0.0 region.Encrypt = false; } if (v2338 != null && configVersion != null && configVersion.VersionNumber < v2338.VersionNumber) { log.WriteDebugMessage("Boombayah 2.3.3.7 or older detected"); // We don't want to include the old "Region Select / Auto Save" region that's found in 2.3.3.7 (or older) // since 2.3.3.8 replaced it with a more dynamic solution when selecting a screenshot that was saved by using "Region Select -> Clipboard / Auto Save". if (region.Name.Equals("Region Select / Auto Save")) { region.Name = string.Empty; } } } if (!string.IsNullOrEmpty(region.Name)) { Add(region); } } // Write out the regions to the XML document now that we've updated the region objects // with their appropriate property values if it was an old version of the application. if (config.Settings.VersionManager.IsOldAppVersion(config.Settings, AppCodename, AppVersion)) { log.WriteDebugMessage("Regions file detected as an old version"); SaveToXmlFile(config.Settings, fileSystem, log); } } return(true); } catch (Exception ex) { if (fileSystem.FileExists(fileSystem.RegionsFile)) { fileSystem.DeleteFile(fileSystem.RegionsFile); log.WriteErrorMessage("The file \"" + fileSystem.RegionsFile + "\" had to be deleted because an error was encountered. You may need to force quit the application and run it again."); } log.WriteExceptionMessage("RegionCollection::Load", ex); return(false); } }
private void FormScreen_Load(object sender, EventArgs e) { textBoxName.Focus(); HelpMessage("This is where to configure a screen capture. Select an available screen from the Component drop-down menu and keep an eye on Preview"); comboBoxFormat.Items.Clear(); comboBoxScreenComponent.Items.Clear(); pictureBoxPreview.Image = null; foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } comboBoxScreenComponent.Items.Add("Active Window"); for (int i = 1; i <= ScreenDictionary.Count; i++) { System.Windows.Forms.Screen screen = ScreenDictionary[i]; comboBoxScreenComponent.Items.Add("Screen " + i + " (" + screen.Bounds.Width + " x " + screen.Bounds.Height + ")"); } if (ScreenObject != null) { Text = "Change Screen"; textBoxName.Text = ScreenObject.Name; textBoxFolder.Text = FileSystem.CorrectScreenshotsFolderPath(ScreenObject.Folder); textBoxMacro.Text = ScreenObject.Macro; if (ScreenObject.Component < comboBoxScreenComponent.Items.Count) { SetControls(enabled: true); comboBoxScreenComponent.SelectedIndex = ScreenObject.Component; } else { SetControls(enabled: false); } comboBoxFormat.SelectedItem = ScreenObject.Format.Name; numericUpDownJpegQuality.Value = ScreenObject.JpegQuality; numericUpDownResolutionRatio.Value = ScreenObject.ResolutionRatio; checkBoxMouse.Checked = ScreenObject.Mouse; checkBoxActive.Checked = ScreenObject.Active; checkBoxActiveWindowTitle.Checked = ScreenObject.ActiveWindowTitleCaptureCheck; textBoxActiveWindowTitle.Text = ScreenObject.ActiveWindowTitleCaptureText; } else { Text = "Add New Screen"; textBoxName.Text = "Screen " + (ScreenCollection.Count + 1); textBoxFolder.Text = FileSystem.ScreenshotsFolder; textBoxMacro.Text = MacroParser.DefaultMacro; comboBoxScreenComponent.SelectedIndex = 0; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; numericUpDownResolutionRatio.Value = 100; checkBoxMouse.Checked = true; checkBoxActive.Checked = true; checkBoxActiveWindowTitle.Checked = false; textBoxActiveWindowTitle.Text = string.Empty; } UpdatePreviewMacro(); UpdatePreviewImage(ScreenCapture); }
private void FormRegion_Load(object sender, EventArgs e) { ScreenDictionary.Clear(); comboBoxScreenTemplate.Items.Clear(); comboBoxTags.DataSource = null; int component = 1; foreach (System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens) { ScreenDictionary.Add(component, screen); component++; } // *** Screen Template *** comboBoxScreenTemplate.Items.Add(string.Empty); for (int i = 1; i <= ScreenDictionary.Count; i++) { System.Windows.Forms.Screen screen = ScreenDictionary[i]; comboBoxScreenTemplate.Items.Add("Screen " + i + " (" + screen.Bounds.Width + " x " + screen.Bounds.Height + ")"); } comboBoxScreenTemplate.SelectedIndex = 0; // *********************** // *** Macro Tags *** comboBoxTags.DisplayMember = "Description"; comboBoxTags.ValueMember = "Name"; comboBoxTags.DataSource = MacroTagCollection.GetList(); // ****************** comboBoxFormat.Items.Clear(); foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } if (RegionObject != null) { Text = "Change Region"; textBoxName.Text = RegionObject.Name; textBoxFolder.Text = FileSystem.CorrectScreenshotsFolderPath(RegionObject.Folder); textBoxMacro.Text = RegionObject.Macro; comboBoxFormat.SelectedItem = RegionObject.Format.Name; numericUpDownJpegQuality.Value = RegionObject.JpegQuality; numericUpDownResolutionRatio.Value = RegionObject.ResolutionRatio; checkBoxMouse.Checked = RegionObject.Mouse; numericUpDownX.Value = RegionObject.X; numericUpDownY.Value = RegionObject.Y; numericUpDownWidth.Value = RegionObject.Width; numericUpDownHeight.Value = RegionObject.Height; } else { Text = "Add New Region"; textBoxName.Text = "Region " + (RegionCollection.Count + 1); textBoxFolder.Text = FileSystem.ScreenshotsFolder; textBoxMacro.Text = MacroParser.DefaultMacro; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; numericUpDownResolutionRatio.Value = 100; checkBoxMouse.Checked = true; numericUpDownX.Value = 0; numericUpDownY.Value = 0; numericUpDownWidth.Value = 800; numericUpDownHeight.Value = 600; } timerPreview.Enabled = true; }
/// <summary> /// Saves the screens. /// </summary> public bool SaveToXmlFile(Settings settings, FileSystem fileSystem, Log log) { try { XmlWriterSettings xSettings = new XmlWriterSettings(); xSettings.Indent = true; xSettings.CloseOutput = true; xSettings.CheckCharacters = true; xSettings.Encoding = Encoding.UTF8; xSettings.NewLineChars = Environment.NewLine; xSettings.IndentChars = XML_FILE_INDENT_CHARS; xSettings.NewLineHandling = NewLineHandling.Entitize; xSettings.ConformanceLevel = ConformanceLevel.Document; if (string.IsNullOrEmpty(fileSystem.ScreensFile)) { fileSystem.ScreensFile = fileSystem.DefaultScreensFile; if (fileSystem.FileExists(fileSystem.ConfigFile)) { fileSystem.AppendToFile(fileSystem.ConfigFile, "\nScreensFile=" + fileSystem.ScreensFile); } } if (fileSystem.FileExists(fileSystem.ScreensFile)) { fileSystem.DeleteFile(fileSystem.ScreensFile); } using (XmlWriter xWriter = XmlWriter.Create(fileSystem.ScreensFile, xSettings)) { xWriter.WriteStartDocument(); xWriter.WriteStartElement(XML_FILE_ROOT_NODE); xWriter.WriteAttributeString("app", "version", XML_FILE_ROOT_NODE, settings.ApplicationVersion); xWriter.WriteAttributeString("app", "codename", XML_FILE_ROOT_NODE, settings.ApplicationCodename); xWriter.WriteStartElement(XML_FILE_SCREENS_NODE); foreach (Screen screen in base.Collection) { xWriter.WriteStartElement(XML_FILE_SCREEN_NODE); xWriter.WriteElementString(SCREEN_ENABLE, screen.Enable.ToString()); xWriter.WriteElementString(SCREEN_VIEWID, screen.ViewId.ToString()); xWriter.WriteElementString(SCREEN_NAME, screen.Name); xWriter.WriteElementString(SCREEN_FOLDER, fileSystem.CorrectScreenshotsFolderPath(screen.Folder)); xWriter.WriteElementString(SCREEN_MACRO, screen.Macro); xWriter.WriteElementString(SCREEN_COMPONENT, screen.Component.ToString()); xWriter.WriteElementString(SCREEN_FORMAT, screen.Format.Name); xWriter.WriteElementString(SCREEN_JPEG_QUALITY, screen.JpegQuality.ToString()); xWriter.WriteElementString(SCREEN_MOUSE, screen.Mouse.ToString()); xWriter.WriteElementString(SCREEN_X, screen.X.ToString()); xWriter.WriteElementString(SCREEN_Y, screen.Y.ToString()); xWriter.WriteElementString(SCREEN_WIDTH, screen.Width.ToString()); xWriter.WriteElementString(SCREEN_HEIGHT, screen.Height.ToString()); xWriter.WriteElementString(SCREEN_SOURCE, screen.Source.ToString()); xWriter.WriteElementString(SCREEN_DEVICE_NAME, screen.DeviceName); xWriter.WriteElementString(SCREEN_AUTO_ADAPT, screen.AutoAdapt.ToString()); xWriter.WriteElementString(SCREEN_CAPTURE_METHOD, screen.CaptureMethod.ToString()); xWriter.WriteElementString(SCREEN_ENCRYPT, screen.Encrypt.ToString()); xWriter.WriteElementString(SCREEN_RESOLUTION_RATIO, screen.ResolutionRatio.ToString()); xWriter.WriteEndElement(); } xWriter.WriteEndElement(); xWriter.WriteEndElement(); xWriter.WriteEndDocument(); xWriter.Flush(); xWriter.Close(); } return(true); } catch (Exception ex) { log.WriteExceptionMessage("ScreenCollection::SaveToXmlFile", ex); return(false); } }
private void FormScreen_Load(object sender, EventArgs e) { textBoxScreenName.Focus(); HelpMessage("This is where to configure a screen capture. Select a source and a component then change the display properties and image attributes"); _toolTip.SetToolTip(checkBoxMouse, "You can include the mouse pointer in your screenshots if the \"Include mouse pointer\" option is checked"); _toolTip.SetToolTip(comboBoxFormat, "Change the image format for the screenshots taken by this screen capture. JPEG is the recommended image format"); _toolTip.SetToolTip(checkBoxActive, "You can capture this screen if Active is checked (turned on)"); _toolTip.SetToolTip(buttonScreenBrowseFolder, "Browse for a folder where screenshots of this screen capture will be saved to"); _toolTip.SetToolTip(buttonMacroTags, "Open a list of available macro tags. You can keep the Macro Tags window open while you modify your macro"); comboBoxFormat.Items.Clear(); pictureBoxPreview.Image = null; foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } comboBoxScreenSource.Items.Clear(); comboBoxScreenSource.Items.Add("Auto Screen Capture"); comboBoxScreenSource.Items.Add("Graphics Card"); comboBoxScreenSource.Items.Add("Operating System"); for (int i = 1; i <= ScreenDictionary.Count; i++) { ScreenCapture.DeviceOptions deviceOptions = ScreenDictionary[i]; comboBoxScreenComponent.Items.Add("Screen " + i + " (" + deviceOptions.width + " x " + deviceOptions.height + ")"); } if (ScreenObject != null) { Text = "Change Screen"; textBoxScreenName.Text = ScreenObject.Name; textBoxFolder.Text = _fileSystem.CorrectScreenshotsFolderPath(ScreenObject.Folder); textBoxMacro.Text = ScreenObject.Macro; comboBoxScreenSource.SelectedIndex = ScreenObject.Source; comboBoxFormat.SelectedItem = ScreenObject.Format.Name; numericUpDownJpegQuality.Value = ScreenObject.JpegQuality; checkBoxMouse.Checked = ScreenObject.Mouse; checkBoxActive.Checked = ScreenObject.Active; numericUpDownX.Value = ScreenObject.X; numericUpDownY.Value = ScreenObject.Y; numericUpDownWidth.Value = ScreenObject.Width; numericUpDownHeight.Value = ScreenObject.Height; } else { Text = "Add Screen"; textBoxScreenName.Text = "Screen " + (ScreenCollection.Count + 1); textBoxFolder.Text = _fileSystem.ScreenshotsFolder; textBoxMacro.Text = _macroParser.DefaultMacro; comboBoxScreenSource.SelectedIndex = 0; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; checkBoxMouse.Checked = true; checkBoxActive.Checked = true; numericUpDownX.Value = 0; numericUpDownY.Value = 0; numericUpDownWidth.Value = 0; numericUpDownHeight.Value = 0; } UpdatePreviewMacro(); UpdatePreviewImage(_screenCapture); }
private void FormScreen_Load(object sender, EventArgs e) { textBoxScreenName.Focus(); HelpMessage("This is where to configure a screen capture. Select an available screen from the Component drop-down menu and keep an eye on Preview"); comboBoxFormat.Items.Clear(); comboBoxScreenComponent.Items.Clear(); pictureBoxPreview.Image = null; foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } comboBoxScreenComponent.Items.Add("Active Window"); for (int i = 1; i <= ScreenDictionary.Count; i++) { ScreenCapture.DeviceResolution deviceResolution = ScreenDictionary[i]; comboBoxScreenComponent.Items.Add("Screen " + i + " (" + deviceResolution.width + " x " + deviceResolution.height + ")"); } if (ScreenObject != null) { Text = "Change Screen"; textBoxScreenName.Text = ScreenObject.Name; textBoxFolder.Text = FileSystem.CorrectScreenshotsFolderPath(ScreenObject.Folder); textBoxMacro.Text = ScreenObject.Macro; if (ScreenObject.Component < comboBoxScreenComponent.Items.Count) { comboBoxScreenComponent.SelectedIndex = ScreenObject.Component; } else { comboBoxScreenComponent.SelectedIndex = 0; MessageBox.Show("The configured screen component has an invalid index since it is not available on this system. The component has therefore been set to Active Window.", "Invalid Screen Index", MessageBoxButtons.OK, MessageBoxIcon.Warning); } comboBoxFormat.SelectedItem = ScreenObject.Format.Name; numericUpDownJpegQuality.Value = ScreenObject.JpegQuality; numericUpDownResolutionRatio.Value = ScreenObject.ResolutionRatio; checkBoxMouse.Checked = ScreenObject.Mouse; checkBoxActive.Checked = ScreenObject.Active; } else { Text = "Add New Screen"; textBoxScreenName.Text = "Screen " + (ScreenCollection.Count + 1); textBoxFolder.Text = FileSystem.ScreenshotsFolder; textBoxMacro.Text = MacroParser.DefaultMacro; comboBoxScreenComponent.SelectedIndex = 0; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; numericUpDownResolutionRatio.Value = 100; checkBoxMouse.Checked = true; checkBoxActive.Checked = true; } UpdatePreviewMacro(); UpdatePreviewImage(ScreenCapture); }
private void FormRegion_Load(object sender, EventArgs e) { textBoxRegionName.Focus(); HelpMessage("This is where to configure a region capture. Change the X, Y, Width, and Height properties while watching Preview"); _toolTip.SetToolTip(checkBoxMouse, "You can include the mouse pointer in your screenshots if the \"Include mouse pointer\" option is checked"); _toolTip.SetToolTip(comboBoxFormat, "Change the image format for the screenshots taken by this region capture. JPEG is the recommended image format"); _toolTip.SetToolTip(comboBoxScreenTemplate, "Acquire the width and height from an available screen to import as the width and height for your region capture"); _toolTip.SetToolTip(checkBoxActive, "You can capture this region if Active is checked (turned on)"); _toolTip.SetToolTip(buttonBrowseFolder, "Browse for a folder where screenshots of this region capture will be saved to"); _toolTip.SetToolTip(buttonMacroTags, "Open a list of available macro tags. You can keep the Macro Tags window open while you modify your macro"); ScreenDictionary.Clear(); comboBoxScreenTemplate.Items.Clear(); int component = 1; foreach (System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens) { ScreenCapture.DeviceResolution deviceResolution = ScreenCapture.GetDeviceResolution(screen); ScreenDictionary.Add(component, deviceResolution); component++; } // *** Screen Template *** comboBoxScreenTemplate.Items.Add(string.Empty); for (int i = 1; i <= ScreenDictionary.Count; i++) { ScreenCapture.DeviceResolution deviceResolution = ScreenDictionary[i]; comboBoxScreenTemplate.Items.Add("\"" + deviceResolution.screen.DeviceName + "\" X:" + deviceResolution.screen.Bounds.X + " Y:" + deviceResolution.screen.Bounds.Y + " (" + deviceResolution.width + "x" + deviceResolution.height + ")"); } comboBoxScreenTemplate.SelectedIndex = 0; // *********************** comboBoxFormat.Items.Clear(); foreach (ImageFormat imageFormat in ImageFormatCollection) { comboBoxFormat.Items.Add(imageFormat.Name); } if (RegionObject != null) { Text = "Change Region"; textBoxRegionName.Text = RegionObject.Name; textBoxFolder.Text = FileSystem.CorrectScreenshotsFolderPath(RegionObject.Folder); textBoxMacro.Text = RegionObject.Macro; comboBoxFormat.SelectedItem = RegionObject.Format.Name; numericUpDownJpegQuality.Value = RegionObject.JpegQuality; numericUpDownResolutionRatio.Value = RegionObject.ResolutionRatio; checkBoxMouse.Checked = RegionObject.Mouse; numericUpDownX.Value = RegionObject.X; numericUpDownY.Value = RegionObject.Y; numericUpDownWidth.Value = RegionObject.Width; numericUpDownHeight.Value = RegionObject.Height; checkBoxActive.Checked = RegionObject.Active; } else { Text = "Add Region"; textBoxRegionName.Text = "Region " + (RegionCollection.Count + 1); textBoxFolder.Text = FileSystem.ScreenshotsFolder; textBoxMacro.Text = MacroParser.DefaultMacro; comboBoxFormat.SelectedItem = ScreenCapture.DefaultImageFormat; numericUpDownJpegQuality.Value = 100; numericUpDownResolutionRatio.Value = 100; checkBoxMouse.Checked = true; numericUpDownX.Value = 0; numericUpDownY.Value = 0; numericUpDownWidth.Value = 800; numericUpDownHeight.Value = 600; checkBoxActive.Checked = true; } UpdatePreviewMacro(); UpdatePreviewImage(ScreenCapture); }
/// <summary> /// Saves the regions. /// </summary> public void SaveToXmlFile() { try { XmlWriterSettings xSettings = new XmlWriterSettings(); xSettings.Indent = true; xSettings.CloseOutput = true; xSettings.CheckCharacters = true; xSettings.Encoding = Encoding.UTF8; xSettings.NewLineChars = Environment.NewLine; xSettings.IndentChars = XML_FILE_INDENT_CHARS; xSettings.NewLineHandling = NewLineHandling.Entitize; xSettings.ConformanceLevel = ConformanceLevel.Document; if (string.IsNullOrEmpty(FileSystem.RegionsFile)) { FileSystem.RegionsFile = FileSystem.DefaultRegionsFile; if (FileSystem.FileExists(FileSystem.ConfigFile)) { FileSystem.AppendToFile(FileSystem.ConfigFile, "\nRegionsFile=" + FileSystem.RegionsFile); } } if (FileSystem.FileExists(FileSystem.RegionsFile)) { FileSystem.DeleteFile(FileSystem.RegionsFile); } using (XmlWriter xWriter = XmlWriter.Create(FileSystem.RegionsFile, xSettings)) { xWriter.WriteStartDocument(); xWriter.WriteStartElement(XML_FILE_ROOT_NODE); xWriter.WriteAttributeString("app", "version", XML_FILE_ROOT_NODE, Settings.ApplicationVersion); xWriter.WriteAttributeString("app", "codename", XML_FILE_ROOT_NODE, Settings.ApplicationCodename); xWriter.WriteStartElement(XML_FILE_REGIONS_NODE); foreach (Region region in base.Collection) { xWriter.WriteStartElement(XML_FILE_REGION_NODE); xWriter.WriteElementString(REGION_ACTIVE, region.Active.ToString()); xWriter.WriteElementString(REGION_VIEWID, region.ViewId.ToString()); xWriter.WriteElementString(REGION_NAME, region.Name); xWriter.WriteElementString(REGION_FOLDER, FileSystem.CorrectScreenshotsFolderPath(region.Folder)); xWriter.WriteElementString(REGION_MACRO, region.Macro); xWriter.WriteElementString(REGION_FORMAT, region.Format.Name); xWriter.WriteElementString(REGION_JPEG_QUALITY, region.JpegQuality.ToString()); xWriter.WriteElementString(REGION_RESOLUTION_RATIO, region.ResolutionRatio.ToString()); xWriter.WriteElementString(REGION_MOUSE, region.Mouse.ToString()); xWriter.WriteElementString(REGION_X, region.X.ToString()); xWriter.WriteElementString(REGION_Y, region.Y.ToString()); xWriter.WriteElementString(REGION_WIDTH, region.Width.ToString()); xWriter.WriteElementString(REGION_HEIGHT, region.Height.ToString()); xWriter.WriteElementString(REGION_ACTIVE_WINDOW_TITLE_CAPTURE_CHECK, region.ActiveWindowTitleCaptureCheck.ToString()); xWriter.WriteElementString(REGION_ACTIVE_WINDOW_TITLE_CAPTURE_TEXT, region.ActiveWindowTitleCaptureText); xWriter.WriteEndElement(); } xWriter.WriteEndElement(); xWriter.WriteEndElement(); xWriter.WriteEndDocument(); xWriter.Flush(); xWriter.Close(); } } catch (Exception ex) { Log.WriteExceptionMessage("RegionCollection::SaveToXmlFile", ex); } }
/// <summary> /// Saves the screens. /// </summary> public bool SaveToXmlFile() { try { XmlWriterSettings xSettings = new XmlWriterSettings(); xSettings.Indent = true; xSettings.CloseOutput = true; xSettings.CheckCharacters = true; xSettings.Encoding = Encoding.UTF8; xSettings.NewLineChars = Environment.NewLine; xSettings.IndentChars = XML_FILE_INDENT_CHARS; xSettings.NewLineHandling = NewLineHandling.Entitize; xSettings.ConformanceLevel = ConformanceLevel.Document; if (string.IsNullOrEmpty(FileSystem.ScreensFile)) { FileSystem.ScreensFile = FileSystem.DefaultScreensFile; if (FileSystem.FileExists(FileSystem.ConfigFile)) { FileSystem.AppendToFile(FileSystem.ConfigFile, "\nScreensFile=" + FileSystem.ScreensFile); } } if (FileSystem.FileExists(FileSystem.ScreensFile)) { FileSystem.DeleteFile(FileSystem.ScreensFile); } using (XmlWriter xWriter = XmlWriter.Create(FileSystem.ScreensFile, xSettings)) { xWriter.WriteStartDocument(); xWriter.WriteStartElement(XML_FILE_ROOT_NODE); xWriter.WriteAttributeString("app", "version", XML_FILE_ROOT_NODE, Settings.ApplicationVersion); xWriter.WriteAttributeString("app", "codename", XML_FILE_ROOT_NODE, Settings.ApplicationCodename); xWriter.WriteStartElement(XML_FILE_SCREENS_NODE); foreach (Screen screen in base.Collection) { xWriter.WriteStartElement(XML_FILE_SCREEN_NODE); xWriter.WriteElementString(SCREEN_ACTIVE, screen.Active.ToString()); xWriter.WriteElementString(SCREEN_VIEWID, screen.ViewId.ToString()); xWriter.WriteElementString(SCREEN_NAME, screen.Name); xWriter.WriteElementString(SCREEN_FOLDER, FileSystem.CorrectScreenshotsFolderPath(screen.Folder)); xWriter.WriteElementString(SCREEN_MACRO, screen.Macro); xWriter.WriteElementString(SCREEN_COMPONENT, screen.Component.ToString()); xWriter.WriteElementString(SCREEN_FORMAT, screen.Format.Name); xWriter.WriteElementString(SCREEN_JPEG_QUALITY, screen.JpegQuality.ToString()); xWriter.WriteElementString(SCREEN_RESOLUTION_RATIO, screen.ResolutionRatio.ToString()); xWriter.WriteElementString(SCREEN_MOUSE, screen.Mouse.ToString()); xWriter.WriteEndElement(); } xWriter.WriteEndElement(); xWriter.WriteEndElement(); xWriter.WriteEndDocument(); xWriter.Flush(); xWriter.Close(); } return(true); } catch (Exception ex) { Log.WriteExceptionMessage("ScreenCollection::SaveToXmlFile", ex); return(false); } }
/// <summary> /// Loads the regions. /// </summary> public void Load(ImageFormatCollection imageFormatCollection) { try { if (File.Exists(FileSystem.RegionsFile)) { XmlDocument xDoc = new XmlDocument(); xDoc.Load(FileSystem.RegionsFile); AppVersion = xDoc.SelectSingleNode("/autoscreen").Attributes["app:version"]?.Value; AppCodename = xDoc.SelectSingleNode("/autoscreen").Attributes["app:codename"]?.Value; XmlNodeList xRegions = xDoc.SelectNodes(REGION_XPATH); foreach (XmlNode xRegion in xRegions) { Region region = new Region(); XmlNodeReader xReader = new XmlNodeReader(xRegion); while (xReader.Read()) { if (xReader.IsStartElement()) { switch (xReader.Name) { case REGION_VIEWID: xReader.Read(); region.ViewId = Guid.Parse(xReader.Value); break; case REGION_NAME: xReader.Read(); region.Name = xReader.Value; break; case REGION_FOLDER: xReader.Read(); region.Folder = xReader.Value; break; case REGION_MACRO: xReader.Read(); region.Macro = xReader.Value; break; case REGION_FORMAT: xReader.Read(); region.Format = imageFormatCollection.GetByName(xReader.Value); break; case REGION_JPEG_QUALITY: xReader.Read(); region.JpegQuality = Convert.ToInt32(xReader.Value); break; case REGION_RESOLUTION_RATIO: xReader.Read(); region.ResolutionRatio = Convert.ToInt32(xReader.Value); break; case REGION_MOUSE: xReader.Read(); region.Mouse = Convert.ToBoolean(xReader.Value); break; case REGION_X: xReader.Read(); region.X = Convert.ToInt32(xReader.Value); break; case REGION_Y: xReader.Read(); region.Y = Convert.ToInt32(xReader.Value); break; case REGION_WIDTH: xReader.Read(); region.Width = Convert.ToInt32(xReader.Value); break; case REGION_HEIGHT: xReader.Read(); region.Height = Convert.ToInt32(xReader.Value); break; } } } xReader.Close(); // Change the data for each region that's being loaded if we've detected that // the XML file is from an older version of the application. if (Settings.VersionManager.IsOldAppVersion(AppCodename, AppVersion)) { if (Settings.VersionManager.Versions.Get("Clara", "2.1.8.2") != null && string.IsNullOrEmpty(AppCodename) && string.IsNullOrEmpty(AppVersion)) { Log.Write("An old version of the regions file was detected. Attempting upgrade to new region format"); region.ViewId = Guid.NewGuid(); // Get the screenshots folder path from the old user settings to be used for the region's folder property. region.Folder = Settings.VersionManager.OldUserSettings.GetByKey("ScreenshotsDirectory", FileSystem.ScreenshotsFolder).Value.ToString(); region.Folder = FileSystem.CorrectScreenshotsFolderPath(region.Folder); // 2.1 used "%region%", but 2.2 uses "%name%" for a region's Macro value. region.Macro = region.Macro.Replace("%region%", "%name%"); region.Format = imageFormatCollection.GetByName(ImageFormatSpec.NAME_JPEG); region.JpegQuality = 100; region.ResolutionRatio = 100; region.Mouse = false; } } if (!string.IsNullOrEmpty(region.Name)) { Add(region); } } // Write out the regions to the XML file now that we've updated the region objects // with their appropriate property values if it was an old version of the application. if (Settings.VersionManager.IsOldAppVersion(AppCodename, AppVersion)) { Save(); } } else { Log.Write($"WARNING: {FileSystem.RegionsFile} not found. Unable to load regions"); } } catch (Exception ex) { Log.Write("RegionCollection::Load", ex); } }