protected override ProcessStartInfo GetRenderExeInfo(WallpaperModel model) { string path = model.RunningData.AbsolutePath; //文档:https://mpv.io/manual/stable/ string playerPath = Path.Combine(WallpaperApi.Options.ExternalPlayerFolder, $@"{PlayerFolderName}\mpv.exe"); if (!File.Exists(playerPath)) { return(null); } FileInfo info = new FileInfo(playerPath); if (info.Length == 0) { return(null); } string args = $"\"{path}\" --hwdec=auto --panscan=1.0 --loop-file=inf --fs --geometry=-10000:-10000"; if (!model.Option.HardwareDecoding) { args = $"\"{path}\" --hwdec=no --panscan=1.0 --loop-file=inf --fs --geometry=-10000:-10000"; } ProcessStartInfo r = new ProcessStartInfo(playerPath) { Arguments = args, UseShellExecute = false }; return(r); }
static internal void ShowWallpaper(WallpaperModel wallpaper, params int[] screenIndexs) { foreach (var screen in screenIndexs) { Status.Wallpapers[screen] = wallpaper; } }
public virtual Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndexs) { return(Task.Run(() => { foreach (var index in screenIndexs) { RenderControl renderControl = null; if (!_controls.ContainsKey(index)) { WallpaperManager.UIInvoke(() => { renderControl = _controls[index] = new RenderControl(); renderControl.InitRender(); }); } else { renderControl = _controls[index]; } var host = RenderHost.GetHost(index); WallpaperManager.UIInvoke(() => { host !.ShowWallpaper(renderControl); }); renderControl.Load(wallpaper.Path); } })); }
public static async Task ShowWallpaper(WallpaperModel wallpaper, params int[] screenIndexs) { if (_ipc == null) { _ipc = new IPCHelper(IPCHelper.ServerID, IPCHelper.RemoteRenderID); } if (_currentProcess == null) { var pList = Process.GetProcessesByName("LiveWallpaperEngineRender"); _currentProcess = pList?.Length > 0 ? pList[0] : null; if (_currentProcess == null) { _currentProcess = Process.Start("LiveWallpaperEngineRender.exe"); //等待render初始完成 await _ipc.Wait <Ready>(); } } //显示壁纸 await _ipc.Send(new InvokeRender() { InvokeMethod = nameof(IRender.ShowWallpaper), Parameters = new object[] { wallpaper, screenIndexs }, }); }
public async Task CloseWallpaperExAsync(WallpaperModel nextWallpaper = null, params string[] screens) { var playingWallpaper = _currentWallpapers.Where(m => screens.Contains(m.Screen)).ToList(); if (playingWallpaper.Count == 0) { return; } foreach (var item in screens) { Debug.WriteLine($"close {GetType().Name} {item}"); } //取消对应屏幕等待未启动的进程 _showWallpaperCts?.Cancel(); _showWallpaperCts?.Dispose(); _showWallpaperCts = null; await InnerCloseWallpaperAsync(playingWallpaper, nextWallpaper); playingWallpaper.ToList().ForEach(m => { _currentWallpapers.Remove(m); }); }
public async Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndexs) { if (_renderProcess == null || _renderProcess.HasExited) { var renderAPIPort = NetworkHelper.GetAvailablePort(8080); _api = new WebRenderAPI("http://*****:*****@"WebRender\livewallpaperwebrender.exe"); _renderProcess = Process.Start(path, $"--hostPort={renderAPIPort}"); } HostInfo info = await _api.GetInfo(); while (info == null || !info.Initlized) { await Task.Delay(1000); info = await _api.GetInfo(); } var hosts = await _api.ShowWallpaper(wallpaper, screenIndexs); foreach (var scIndex in screenIndexs) { IntPtr windowHandle = hosts[scIndex]; WallpaperHelper.GetInstance(scIndex).SendToBackground(windowHandle); } }
public async Task ShowWallpaper(WallpaperModel wallpaper, params int[] screenIndexs) { var ipc = await GetIPCHelper(); await ipc.Send(new InvokeILiveWallpaperAPI() { InvokeMethod = nameof(ILiveWallpaperAPI.ShowWallpaper), Parameters = new object[] { wallpaper, screenIndexs } }); }
protected virtual Task <ShowWallpaperResult> InnerShowWallpaper(WallpaperModel wallpaper, CancellationToken ct, params string[] screens) { var infos = screens.Select(m => new RenderInfo() { Wallpaper = wallpaper, Screen = m }).ToList(); return(Task.FromResult(new ShowWallpaperResult() { RenderInfos = infos, Ok = true })); }
public Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndexs) { foreach (var index in screenIndexs) { var process = Process.Start(wallpaper.Path); // 刚创建的进程可能无法获取到MainWindowHandle属性,所以延时两秒保证属性获取正常 Thread.Sleep(2 * 1000); WallpaperHelper.GetInstance(index).SendToBackground(process.MainWindowHandle); // 设置要接受鼠标消息的窗口的句柄 mouseEventReciver.HTargetWindow = process.MainWindowHandle; } return(Task.CompletedTask); }
public virtual Task ShowWallpaper(WallpaperModel wallpaper, params int[] screenIndexs) { foreach (var index in screenIndexs) { if (!_controls.ContainsKey(index)) { _controls[index] = new RenderControl(); _controls[index].InitRender(); } var screen = RenderHost.GetHost(index); screen.ShowWallpaper(_controls[index]); _controls[index].Load(wallpaper.Path); } return(Task.CompletedTask); }
public async Task ShowWallpaper(WallpaperModel wallpaper, params int[] screenIndexs) { if (_renderProcess == null || _renderProcess.HasExited) { var renderAPIPort = GetAvailablePort(9000); _renderProcess = Process.Start("", renderAPIPort.ToString()); } foreach (var scIndex in screenIndexs) { IntPtr windowHandle = await GetHostFromRemote(scIndex); WallpaperHelper.GetInstance(scIndex).SendToBackground(windowHandle); } throw new System.NotImplementedException(); }
public async Task <ShowWallpaperResult> ShowWallpaper(WallpaperModel wallpaper, params string[] screens) { foreach (var item in screens) { Debug.WriteLine($"show {GetType().Name} {item}"); } List <RenderInfo> changedRender = new List <RenderInfo>(); //过滤无变化的屏幕 var changedScreen = screens.Where(m => { bool ok = false; var existRender = _currentWallpapers.FirstOrDefault(x => x.Screen == m); if (existRender == null) { ok = true; } else { ok = existRender.Wallpaper.Path != wallpaper.Path; changedRender.Add(existRender); } return(ok); }).ToArray(); if (changedScreen.Length > 0) { //关闭已经展现的壁纸 await InnerCloseWallpaperAsync(changedRender, true); _showWallpaperCts = new CancellationTokenSource(); var showResult = await InnerShowWallpaper(wallpaper, _showWallpaperCts.Token, changedScreen); if (!showResult.Ok) { return(showResult); } //更新当前壁纸 showResult.RenderInfos.ForEach(m => _currentWallpapers.Add(m)); } return(new ShowWallpaperResult() { Ok = true }); }
public async Task <BaseApiResult <List <RenderInfo> > > ShowWallpaper(WallpaperModel wallpaper, params string[] screens) { foreach (var item in screens) { Debug.WriteLine($"show {GetType().Name} {item}"); } //List<RenderInfo> changedRenderInfo = new(); //过滤无变化的屏幕 var changedScreen = screens.Where(m => { bool ok = false; var existRenderInfo = _currentWallpapers.FirstOrDefault(x => x.Screen == m); if (existRenderInfo == null) { ok = true; } else { //路径变化或者播放参数变化,都要重新播放 ok = existRenderInfo.Wallpaper.RunningData.AbsolutePath != wallpaper.RunningData.AbsolutePath || existRenderInfo.Wallpaper.Option != wallpaper.Option; //changedRenderInfo.Add(existRenderInfo); } return(ok); }).ToArray(); if (changedScreen.Length > 0) { //关闭已经展现的壁纸 await CloseWallpaperExAsync(wallpaper, changedScreen); _showWallpaperCts = new CancellationTokenSource(); var showResult = await InnerShowWallpaper(wallpaper, _showWallpaperCts.Token, changedScreen); if (!showResult.Ok) { return(showResult); } //更新当前壁纸 showResult.Data.ForEach(m => _currentWallpapers.Add(m)); } return(BaseApiResult <List <RenderInfo> > .SuccessState()); }
public async Task<Dictionary<uint, IntPtr>> ShowWallpaper(WallpaperModel wallpaper, uint[] screenIndexs) { try { string ids = GetIds(screenIndexs); using var client = new HttpClient(); string url = _baseUrl + $"/showWallpaper?path={wallpaper.Path}&screenIndexs={ids}"; var json = await client.GetStringAsync(url); var result = JsonConvert.DeserializeObject<Dictionary<uint, IntPtr>>(json); return result; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); return null; } }
public async Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndexs) { try { using var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromSeconds(10)); var para = new ShowWallpaperRequest() { Wallpaper = wallpaper }; para.ScreenIndexs.AddRange(screenIndexs); _ = await _client.ShowWallpaperAsync(para); } catch (Exception) { } }
protected override ProcessStartInfo GetRenderExeInfo(WallpaperModel model) { string path = model.RunningData.AbsolutePath; //文档:https://mpv.io/manual/stable/ string playerPath = Path.Combine(WallpaperApi.Options.ExternalPlayerFolder, $@"{PlayerFolderName}\LiveWallpaperEngineWebRender.exe"); if (!File.Exists(playerPath)) { return(null); } var r = new ProcessStartInfo(playerPath) { Arguments = $"\"{path}\" --position=-10000,-10000", UseShellExecute = false }; return(r); }
public async Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndexs) { if (wallpaper.Type == WallpaperType.NotSupport) { wallpaper.Type = RenderFactory.ResoveType(wallpaper.Path); } if (wallpaper.Type == WallpaperType.NotSupport) { return; } foreach (var index in screenIndexs) { //类型不一致关闭上次显示的壁纸 if (CurrentWalpapers.ContainsKey(index) && wallpaper.Type != CurrentWalpapers[index].Type) { CloseWallpaper(screenIndexs); } } var currentRender = RenderFactory.GetOrCreateRender(wallpaper.Type); await currentRender.ShowWallpaper(wallpaper, screenIndexs); foreach (var index in screenIndexs) { if (!CurrentWalpapers.ContainsKey(index)) { CurrentWalpapers.Add(index, wallpaper); } else { CurrentWalpapers[index] = wallpaper; } } ApplyAudioSource(); }
public async Task ShowWallpaper(WallpaperModel wallpaper, params int[] screenIndexs) { //CloseWallpaper(screenIndexs); if (wallpaper.Type == null) { wallpaper.Type = RenderFactory.ResoveType(wallpaper.Path); } if (wallpaper.Type.DType == WalllpaperDefinedType.NotSupport) { return; } foreach (var index in screenIndexs) { //类型不一致关闭上次显示的壁纸 if (_currentWalpapers.ContainsKey(index) && wallpaper.Type.DType != _currentWalpapers[index].Type.DType) { CloseWallpaper(screenIndexs); } } var currentRender = RenderFactory.GetOrCreateRender(wallpaper.Type.DType); await currentRender.ShowWallpaper(wallpaper, screenIndexs); foreach (var index in screenIndexs) { if (!_currentWalpapers.ContainsKey(index)) { _currentWalpapers.Add(index, wallpaper); } else { _currentWalpapers[index] = wallpaper; } } }
protected override Task <ShowWallpaperResult> InnerShowWallpaper(WallpaperModel wallpaper, CancellationToken ct, params string[] screens) { return(Task.Run(() => { foreach (var screenName in screens) { CacheOldWallpaper(screenName, () => _desktopFactory.GetWallpaper(screenName)); string monitoryId = GetMonitoryId(screenName); _desktopFactory.SetWallpaper(monitoryId, wallpaper.Path); } List <RenderInfo> infos = screens.Select(m => new RenderInfo() { Wallpaper = wallpaper, Screen = m }).ToList(); return new ShowWallpaperResult() { Ok = true, RenderInfos = infos }; })); }
protected virtual Task <BaseApiResult <List <RenderInfo> > > InnerShowWallpaper(WallpaperModel wallpaper, CancellationToken ct, params string[] screens) { var infos = screens.Select(m => new RenderInfo() { Wallpaper = wallpaper, Screen = m }).ToList(); return(Task.FromResult(BaseApiResult <List <RenderInfo> > .SuccessState(infos))); }
private async void btnSelect_Click(object sender, RoutedEventArgs e) { //System.Diagnostics.Debug.WriteLine("before ShowWallpaper " + GetActiveWindowTitle()); using (var openFileDialog = new OpenFileDialog()) { openFileDialog.InitialDirectory = "WallpaperSamples"; openFileDialog.Filter = "All files (*.*)|*.*"; if (openFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { var displayScreen = monitorsVM.Where(m => m.Checked).Select(m => m.DeviceName).ToArray(); btnApply_Click(null, null); var wp = new WallpaperModel() { Path = openFileDialog.FileName }; var showResult = await WallpaperApi.ShowWallpaper(wp, displayScreen); if (!showResult.Ok) { if (showResult.Error == ErrorType.NoPlayer) { var r = System.Windows.MessageBox.Show($"{showResult.Error} {showResult.Message}, Whether to download the player?", "", MessageBoxButton.OKCancel); if (r == MessageBoxResult.OK) { popup.Visibility = Visibility.Visible; txtPopup.Text = "downloading..."; var url = WallpaperApi.PlayerUrls.FirstOrDefault(m => m.Type == wp.Type).DownloadUrl; void WallpaperManager_SetupPlayerProgressChangedEvent(object sender, SetupPlayerProgressChangedArgs e) { Dispatcher.BeginInvoke(new Action(async() => { txtPopup.Text = $"{(e.ActionType == SetupPlayerProgressChangedArgs.Type.Unpacking ? "unpacking" : "downloading")} ... {(int)(e.ProgressPercentage * 100)}%"; if (e.AllCompleted) { WallpaperApi.SetupPlayerProgressChangedEvent -= WallpaperManager_SetupPlayerProgressChangedEvent; popup.Visibility = Visibility.Collapsed; if (e.Result.Ok) { showResult = await WallpaperApi.ShowWallpaper(wp, displayScreen); } else { System.Windows.Forms.MessageBox.Show($"Message:{e.Result.Message},Error:{e.Result.Error}"); } } })); } WallpaperApi.SetupPlayerProgressChangedEvent -= WallpaperManager_SetupPlayerProgressChangedEvent; WallpaperApi.SetupPlayerProgressChangedEvent += WallpaperManager_SetupPlayerProgressChangedEvent; var setupResult = WallpaperApi.SetupPlayer(wp.Type.Value, url); } } else { System.Windows.MessageBox.Show($"{showResult.Error} {showResult.Message} "); } } } } //System.Diagnostics.Debug.WriteLine("after ShowWallpaper" + GetActiveWindowTitle()); //IntPtr progman = User32Wrapper.FindWindow("Progman", null); //User32Wrapper.SetForegroundWindow(window); //change focus from the started window//application. //User32Wrapper.SetFocus(window); Activate(); }
protected override async Task <BaseApiResult <List <RenderInfo> > > InnerShowWallpaper(WallpaperModel wallpaper, CancellationToken ct, params string[] screens) { List <RenderInfo> infos = new List <RenderInfo>(); List <Task> tmpTasks = new List <Task>(); ProcessStartInfo pInfo = await Task.Run(() => GetRenderExeInfo(wallpaper)); if (pInfo == null) { return(BaseApiResult <List <RenderInfo> > .ErrorState(ErrorType.NoPlayer)); } foreach (var screenItem in screens) { if (ct.IsCancellationRequested) { break; } var task = Task.Run(async() => { try { var processResult = await StartProcess(pInfo, ct); //壁纸启动失败 if (processResult.HostHandle == IntPtr.Zero) { return; } var host = LiveWallpaperRenderForm.GetHost(screenItem); host !.ShowWallpaper(processResult.HostHandle); infos.Add(new RenderInfo(processResult) { Wallpaper = wallpaper, Screen = screenItem }); } catch (OperationCanceledException) { } catch (Exception ex) { Debug.WriteLine(ex); } }, ct); tmpTasks.Add(task); } await Task.WhenAll(tmpTasks); if (SupportMouseEvent && WallpaperApi.Options.ForwardMouseEvent && wallpaper.Option.EnableMouseEvent) { foreach (var item in infos) { await DesktopMouseEventReciver.AddHandle(item.ReceiveMouseEventHandle, item.Screen); } } return(BaseApiResult <List <RenderInfo> > .SuccessState(infos)); }
protected virtual ProcessStartInfo GetRenderExeInfo(WallpaperModel model) { return(new ProcessStartInfo(model.RunningData.AbsolutePath)); }
protected override Task <BaseApiResult <List <RenderInfo> > > InnerShowWallpaper(WallpaperModel wallpaper, CancellationToken ct, params string[] screens) { return(Task.Run(() => { foreach (var screenName in screens) { CacheOldWallpaper(screenName, () => _desktopFactory.GetWallpaper(screenName)); string monitoryId = GetMonitoryId(screenName); _desktopFactory.SetWallpaper(monitoryId, wallpaper.RunningData.AbsolutePath); } List <RenderInfo> infos = screens.Select(m => new RenderInfo() { Wallpaper = wallpaper, Screen = m }).ToList(); return BaseApiResult <List <RenderInfo> > .SuccessState(infos); })); }
public Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndex) { throw new NotImplementedException(); }
public ActionResult ListJson() { Hashtable request = new Hashtable(); var res = new JsonResult(); List <WallpaperModel> cateList = new List <WallpaperModel>(); string sql = "select a.*,b.title as caTitle,c.title as sbTitle from Wallpaper as a left join Category as b on a.caID = b.caID left join Subject as c on a.sbID = c.sbID"; SqlDataReader reader = SqlHelper.SqlHelper.ExecuteReader(sql, null); if (reader.HasRows) { while (reader.Read()) { WallpaperModel wallpaperModel = new WallpaperModel(); wallpaperModel.wpID = reader.GetInt32(0); wallpaperModel.caID = reader.GetInt32(1); object imgUrl = reader.IsDBNull(2) ? null : reader.GetString(2); wallpaperModel.imageUrl = imgUrl == null ? string.Empty : Convert.ToString(imgUrl); wallpaperModel.clickNum = reader.GetInt32(3); object keyWord = reader.IsDBNull(4) ? null : reader.GetString(4); wallpaperModel.keyWord = keyWord == null ? string.Empty : Convert.ToString(keyWord); wallpaperModel.suID = reader.GetInt32(5); object title = reader.IsDBNull(6) ? null : reader.GetString(6); wallpaperModel.title = title == null ? string.Empty : Convert.ToString(title); object caTitle = reader.IsDBNull(7) ? null : reader.GetString(7); wallpaperModel.caTitle = caTitle == null ? string.Empty : Convert.ToString(caTitle); object sbTitle = reader.IsDBNull(8) ? null : reader.GetString(8); wallpaperModel.sbTitle = sbTitle == null ? string.Empty : Convert.ToString(sbTitle); cateList.Add(wallpaperModel); } request.Add("message", "查询成功"); request.Add("isSucceed", true); request.Add("data", cateList); } else { request.Add("message", "暂时没有壁纸"); request.Add("isSucceed", false); } res.Data = request; res.JsonRequestBehavior = JsonRequestBehavior.AllowGet; return(res); }
/// <summary> /// 可重载,处理具体的关闭逻辑 /// </summary> /// <param name="playingWallpaper"></param> /// <param name="closeBeforeOpening">是否是临时关闭,临时关闭表示马上又会继续播放其他壁纸</param> /// <returns></returns> protected virtual Task InnerCloseWallpaperAsync(List <RenderInfo> playingWallpaper, WallpaperModel nextWallpaper = null) { return(Task.CompletedTask); }
public override async Task ShowWallpaper(WallpaperModel wallpaper, params uint[] screenIndexs) { await base.ShowWallpaper(wallpaper, screenIndexs); await Task.Run(DesktopMouseEventReciver.Start); }
protected override async Task InnerCloseWallpaperAsync(List <RenderInfo> wallpaperRenders, WallpaperModel nextWallpaper) { //不论是否临时关闭,都需要关闭进程重启进程 foreach (var render in wallpaperRenders) { try { var p = Process.GetProcessById(render.PId); p.Kill(); } catch (Exception ex) { Debug.WriteLine($"InnerCloseWallpaper ex:{ex}"); } finally { if (SupportMouseEvent) { await DesktopMouseEventReciver.RemoveHandle(render.ReceiveMouseEventHandle); } } } }