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); }
/// <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; }
/// <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); }