static IDisposable RegisterMinimalListener() { var window = new TransparentWindow(); window.Show(); Guid? desktopId = null; var timeLimit = TimeSpan.FromSeconds(30); var limitTimer = Stopwatch.StartNew(); COMException exception = null; int attempts = 10; while (limitTimer.Elapsed < timeLimit || attempts > 0) { attempts = Math.Max(0, attempts - 1); try { desktopId = VirtualDesktop.IdFromHwnd(window.Handle); exception = null; } catch (COMException ex) when(ex.Match(HResult.INVALID_STATE)) { Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new Action(() => {})); if (limitTimer.Elapsed >= timeLimit && attempts <= 0) { throw; } exception = ex; } } if (desktopId == null && exception != null && limitTimer.Elapsed >= timeLimit) { throw exception; } var timer = new DispatcherTimer(DispatcherPriority.Normal) { Interval = TimeSpan.FromMilliseconds(250), IsEnabled = true, }; timer.Tick += delegate { var newId = VirtualDesktop.IdFromHwnd(window.Handle); if (newId == null || newId == desktopId) { return; } var newDesktop = VirtualDesktop.FromId(newId.Value); var oldDesktop = desktopId == null ? null : VirtualDesktop.FromId(desktopId.Value); var changedArgs = new VirtualDesktopChangedEventArgs(oldDesktop, newDesktop); CurrentChanged?.Invoke(typeof(VirtualDesktop), changedArgs); desktopId = newId; }; return(Disposable.Create(() => { timer.Stop(); window.Close(); })); }
void IVirtualDesktopNotification.CurrentVirtualDesktopChanged(IVirtualDesktop pDesktopOld, IVirtualDesktop pDesktopNew) { var args = new VirtualDesktopChangedEventArgs(FromComObject(pDesktopOld), FromComObject(pDesktopNew)); if (CurrentChanged != null) { CurrentChanged.Invoke(this, args); } }
private void VirtualDesktop_CurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { // Update Text by Current Desktop GUID EventMessage.Text = e.NewDesktop.Id.ToString(); // Move my window to current virtual desktop this.MoveToDesktop(e.NewDesktop); })); }
private void VirtualDesktopOnCurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { if (!GeneralSettings.NotificationWhenSwitchedDesktop) return; VisualHelper.InvokeOnUIDispatcher(() => { var desktops = VirtualDesktop.GetDesktops(); var newIndex = Array.IndexOf(desktops, e.NewDesktop) + 1; this.currentNotificationWindow?.Dispose(); this.currentNotificationWindow = ShowWindow(newIndex); }); }
private void VirtualDesktopOnCurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { if (!Settings.General.NotificationWhenSwitchedDesktop) return; VisualHelper.InvokeOnUIDispatcher(() => { var desktops = VirtualDesktop.GetDesktops(); var newIndex = Array.IndexOf(desktops, e.NewDesktop) + 1; this._notificationWindow.Disposable = ShowWindow(newIndex); // var imgDirectoryPath = @"D:\User\Pictures\vd-bg\"; var imgDirectoryPath = Settings.General.DesktopBackgroundFolderPath; var bmpPath = imgDirectoryPath + newIndex.ToString() + ".bmp"; if (System.IO.File.Exists(bmpPath)) { WallpaperService.Set(bmpPath); } }); }
private void VirtualDesktopOnCurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { if (!GeneralSettings.NotificationWhenSwitchedDesktop) return; VisualHelper.InvokeOnUIDispatcher(() => { var desktops = VirtualDesktop.GetDesktops(); var newIndex = Array.IndexOf(desktops, e.NewDesktop) + 1; this.currentNotificationWindow?.Dispose(); var vmodel = new NotificationWindowViewModel { Title = ProductInfo.Title, Header = "Virtual Desktop Switched", Body = "Current Desktop: Desktop " + newIndex, }; this.currentNotificationWindow = ShowWindow(vmodel); }); }
public static void RaiseCurrentChanged(object sender, VirtualDesktop pDesktopOld, VirtualDesktop pDesktopNew) { var args = new VirtualDesktopChangedEventArgs(pDesktopOld, pDesktopNew); CurrentChanged?.Invoke(sender, args); }
private void VirtualDesktop_CurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, (Action)(() => { try { this.MoveToDesktop(VirtualDesktop.Current); } catch (InvalidOperationException) { } })); }
void IVirtualDesktopNotification.CurrentVirtualDesktopChanged(IVirtualDesktop pDesktopOld, IVirtualDesktop pDesktopNew) { var args = new VirtualDesktopChangedEventArgs(FromComObject(pDesktopOld), FromComObject(pDesktopNew)); CurrentChanged?.Invoke(this, args); }
private void VirtualDesktopOnCurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { IntPtr[] targets; lock (this._sync) { targets = this._pinnedWindows.Keys.ToArray(); } VisualHelper.InvokeOnUIDispatcher(() => { foreach (var hWnd in targets.Where(x => !VirtualDesktopHelper.MoveToDesktop(x, e.NewDesktop))) { this._helper.MoveWindowToDesktop(hWnd, e.NewDesktop.Id); } }); }
private void VirtualDesktopOnCurrentChanged(object sender, VirtualDesktopChangedEventArgs e) { Task.Run(() => { if (!Settings.General.ChangeBackgroundEachDesktop) return; var desktops = VirtualDesktop.GetDesktops(); var newIndex = Array.IndexOf(desktops, e.NewDesktop) + 1; var file = this.GetWallpaperFiles(Settings.General.DesktopBackgroundFolderPath).FirstOrDefault(x => x.Number == newIndex); if (file != null) this.Set(file.Filepath); }); }