public static extern bool EnumDisplayDevices(string lpDevice, int iDevNum, [In, Out] MediaPortalApp.DISPLAY_DEVICE lpDisplayDevice, int dwFlags);
/// <summary> /// Starts the actual splash screen. /// </summary> /// <remarks> /// This method is started in a background thread by the <see cref="Run"/> method.</remarks> private void DoRun() { try { bool useFullScreenSplash; bool startFullScreen; int screenNumber; string _screenDisplayName; bool _usePrimaryScreen; string screenDeviceId; using (Settings xmlreader = new MPSettings()) { useFullScreenSplash = xmlreader.GetValueAsBool("general", "usefullscreensplash", true); startFullScreen = !D3D.WindowedOverride && (D3D.FullscreenOverride || xmlreader.GetValueAsBool("general", "startfullscreen", true)); screenNumber = xmlreader.GetValueAsInt("screenselector", "screennumber", 0); _alwaysOnTop = xmlreader.GetValueAsBool("general", "alwaysontop", false); _usePrimaryScreen = xmlreader.GetValueAsBool("general", "useprimaryscreen", false); _screenDisplayName = xmlreader.GetValueAsString("screenselector", "screendisplayname", ""); screenDeviceId = xmlreader.GetValueAsString("screenselector", "screendeviceid", ""); } if (D3D.ScreenNumberOverride >= 0) { screenNumber = D3D.ScreenNumberOverride; if (screenNumber < 0 || screenNumber >= Screen.AllScreens.Length) { screenNumber = 0; } CurrentDisplay = Screen.AllScreens[screenNumber]; } else { foreach (Screen screen in Screen.AllScreens) { const int dwf = 0; var info = new MediaPortalApp.DISPLAY_DEVICE(); string monitorname = null; string deviceId = null; info.cb = Marshal.SizeOf(info); if (EnumDisplayDevices(screen.DeviceName, 0, info, dwf)) { monitorname = info.DeviceString; deviceId = info.DeviceID; } if (monitorname == null) { monitorname = ""; } if (deviceId == null) { deviceId = ""; } if (_usePrimaryScreen) { if (screen.Primary) { CurrentDisplay = screen; break; } } else { if (!string.IsNullOrEmpty(deviceId)) { if (deviceId.Equals(screenDeviceId)) { CurrentDisplay = screen; break; } } else { if (screen.DeviceName.Equals(_screenDisplayName)) { CurrentDisplay = screen; break; } } } } if (CurrentDisplay == null) { CurrentDisplay = screenNumber >= Screen.AllScreens.Length ? Screen.AllScreens[0] : Screen.AllScreens[screenNumber]; } } Log.Info("SplashScreen: Splash screen is using screen: {0} (Position: {1},{2} Dimensions: {3}x{4})", GetCleanDisplayName(CurrentDisplay), CurrentDisplay.Bounds.Location.X, CurrentDisplay.Bounds.Location.Y, CurrentDisplay.Bounds.Width, CurrentDisplay.Bounds.Height); if (useFullScreenSplash && startFullScreen) { ShowFullScreenSplashScreen(); } else { ShowNormalSplash(); } } catch (Exception e) { Log.Error("Error during splashscreen handling: {0}", e.Message); } }