Beispiel #1
0
 void Awake()
 {
     if (mInstance == null)
     {
         mInstance = this;
     }
     else
     {
         Debug.Log("ScreenEx Only One! " + "-1-" + mInstance.gameObject.name + " -2-" + this.gameObject.name);
     }
 }
        public static ScreenEx GetScreenSettings(Forms.Screen screen)
        {
            ScreenSettingsDevMode DevMode = new ScreenSettingsDevMode(true);

            if (EnumDisplaySettings(screen.DeviceName, -1 /*current settings*/, ref DevMode) == 0)
            {
                throw new Exception("EnumDisplaySettings (user32.dll) returned 0");
            }
            ScreenEx screenSettings = new ScreenEx(screen, DevMode);

            return(screenSettings);
        }
Beispiel #3
0
        /// <summary>
        /// <para>Updates the screen's settings</para>
        /// </summary>
        /// <param name="screen"></param>
        /// <returns></returns>
        public static bool UpdateScreen(ScreenEx screen)
        {
            ScreenSettingsDevMode devMode = screen.ToDEVMODE();
            DispChange            result  = ChangeDisplaySettingsEx(screen.Name, ref devMode, CDS.RESET | CDS.UPDATEREGISTRY);

            if (result >= 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        void Win32_SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
        {
            if (OnDisplaySettingsChanged != null)
            {
                OnDisplaySettingsChanged(this, e);
            }
            List <ScreenEx> oldScreens = (List <ScreenEx>)oldValues[EventType.DisplaySettingsChanged];
            List <ScreenEx> newScreens = Status.Screen.AllScreens;
            ScreenEx        oldPrimary = null;

            foreach (ScreenEx newScreen in newScreens)
            {
                ScreenEx found = oldScreens.Find(new Predicate <ScreenEx>(item => { return(item.Name == newScreen.Name); }));
                if (found == null)
                {
                    if (OnScreenAdded != null)
                    {
                        OnScreenAdded(this, new EventArgsValue <ScreenEx>(newScreen));
                    }
                }
                else
                {
                    bool changed = false;
                    EventArgsValues <ScreenEx> eav = new EventArgsValues <ScreenEx>(found, newScreen);
                    if (newScreen.BitsPerPixel != found.BitsPerPixel)
                    {
                        changed = true;
                        if (OnScreenColorDepthChanged != null)
                        {
                            OnScreenColorDepthChanged(this, eav);
                        }
                    }
                    if (newScreen.Bounds.Size != found.Bounds.Size)
                    {
                        changed = true;
                        if (OnScreenResolutionChanged != null)
                        {
                            OnScreenResolutionChanged(this, eav);
                        }
                    }
                    if (newScreen.Bounds.Location != found.Bounds.Location)
                    {
                        changed = true;
                        if (OnScreenLocationChanged != null)
                        {
                            OnScreenLocationChanged(this, eav);
                        }
                    }
                    if (newScreen.Frequency != found.Frequency)
                    {
                        changed = true;
                        if (OnScreenRefreshRateChanged != null)
                        {
                            OnScreenRefreshRateChanged(this, eav);
                        }
                    }
                    if (newScreen.Orientation != found.Orientation)
                    {
                        changed = true;
                        if (OnScreenOrientationChanged != null)
                        {
                            OnScreenOrientationChanged(this, eav);
                        }
                    }

                    if (changed && OnScreenChanged != null)
                    {
                        OnScreenChanged(this, eav);
                    }

                    if (found.Primary)
                    {
                        oldPrimary = found;
                    }

                    oldScreens.Remove(found);
                }
            }
            if (OnScreenRemoved != null)
            {
                foreach (ScreenEx oldScreen in oldScreens)
                {
                    OnScreenRemoved(this, new EventArgsValue <ScreenEx>(oldScreen));
                }
            }

            ScreenEx newPrimary = Status.Screen.PrimaryScreen;

            if (OnPrimaryScreenChanged != null && oldPrimary != newPrimary)
            {
                OnPrimaryScreenChanged(this, new EventArgsValues <ScreenEx>(oldPrimary, newPrimary));
            }

            oldValues[EventType.DisplaySettingsChanged] = newScreens;
        }
Beispiel #5
0
        /// <summary>
        /// <para>Updates the screen's settings and sets it as primary screen</para>
        /// </summary>
        /// <param name="screen"></param>
        /// <returns></returns>
        public static bool UpdateScreenAndMakePrimary(ScreenEx screen)
        {
            ScreenSettingsDevMode devMode = screen.ToDEVMODE();

            return(ChangeDisplaySettingsEx(screen.Name, ref devMode, CDS.RESET | CDS.UPDATEREGISTRY | CDS.SET_PRIMARY) >= 0);
        }