private void ShowScreenSaver() { var screenSaverParams = ScreenSaverParam.LoadParams(Screen.AllScreens.Length); for (var index = 0; index < Screen.AllScreens.Length; ++index) { var screen = Screen.AllScreens[index]; var screenSaverParam = screenSaverParams[index]; var window = new ScreenSaverWindow(index, screenSaverParam, screen.Bounds); window.Show(); } }
private void PreviewScreenSaver(IntPtr previewHandle) { var screenSaverParams = ScreenSaverParam.LoadParams(1); var window = new ScreenSaverWindow(0, screenSaverParams[0], previewHandle); NativeMethods.GetClientRect(previewHandle, out var rect); var previewParam = new HwndSourceParameters("ScreenSaverPreview"); previewParam.SetPosition(0, 0); previewParam.SetSize(rect.Width, rect.Height); previewParam.ParentWindow = previewHandle; previewParam.WindowStyle = (int)(NativeWindowStyle.WS_VISIBLE | NativeWindowStyle.WS_CHILD | NativeWindowStyle.WS_CLIPCHILDREN); var previewSource = new HwndSource(previewParam); previewSource.Disposed += (s, e) => Application.Current.Shutdown(); previewSource.RootVisual = window.RootObject; }
public static IList <ScreenSaverParam> LoadParams(int count) { var screenConfigs = LoadScreenConfigs(count); var appConfig = AppConfig.Load(); var screenGroupConfig = ScreenGroupConfig.Load(); var screenSaverParams = new List <ScreenSaverParam>(); var groupSourceParams = new Dictionary <int, ScreenSaverParam>(); for (var index = 0; index < count; ++index) { var screenPlaylistConfig = screenConfigs[index].RandomPlaylistConfig(); var screenState = ScreenState.Load(index); var screenSaverParam = new ScreenSaverParam { Index = index, AppConfig = appConfig, InitialTime = screenPlaylistConfig.InitialTime(screenState), }; var groupSourceIndex = screenGroupConfig.GroupSourceIndex(index); if (groupSourceIndex == null) // グループではない { screenSaverParam.PlaylistView = screenPlaylistConfig.PlaylistView(screenState); screenSaverParams.Add(screenSaverParam); } else if (index == groupSourceIndex) // グループの最初のスクリーン { screenSaverParam.PlaylistView = new SynchronizedPlaylistView( screenPlaylistConfig.PlaylistView(screenState), screenGroupConfig.GroupMemberCount(index, count - 1) ); groupSourceParams[index] = screenSaverParam; screenSaverParams.Add(screenSaverParam); } else // グループの2番目以降のスクリーン { screenSaverParams.Add(groupSourceParams[(int)groupSourceIndex]); } } return(screenSaverParams); }