示例#1
0
        private void AddDefaultScreens()
        {
            int component = 1;

            foreach (System.Windows.Forms.Screen screen in System.Windows.Forms.Screen.AllScreens)
            {
                ScreenCapture.DeviceResolution deviceResolution = ScreenCapture.GetDeviceResolution(screen);

                Add(new Screen()
                {
                    ViewId          = Guid.NewGuid(),
                    Name            = "Screen " + component,
                    Folder          = FileSystem.ScreenshotsFolder,
                    Macro           = MacroParser.DefaultMacro,
                    Component       = component,
                    Format          = _imageFormatCollection.GetByName(ScreenCapture.DefaultImageFormat),
                    JpegQuality     = 100,
                    ResolutionRatio = 100,
                    Mouse           = true,
                    Active          = true,
                    X          = screen.Bounds.X,
                    Y          = screen.Bounds.Y,
                    Width      = deviceResolution.width,
                    Height     = deviceResolution.height,
                    Source     = 0,
                    DeviceName = deviceResolution.screen.DeviceName
                });

                Log.WriteDebugMessage($"Screen {component} created using \"{FileSystem.ScreenshotsFolder}\" for folder path and \"{MacroParser.DefaultMacro}\" for macro.");

                component++;
            }
        }
示例#2
0
        /// <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);
            }
        }