2015-11-05 1 views
1

J'ai programme C# WPF avec plusieurs fenêtres. J'ai ajouté la prise en charge des bureaux Windows 10, mais les utilisateurs souhaitent que certaines fenêtres restent à l'écran lorsque vous passez d'un bureau à un autre. Par exemple, si la fenêtre A est ouverte sur le premier bureau et qu'ils basculent vers le deuxième bureau, ils veulent que la fenêtre A reste au même emplacement sur le nouveau bureau.Fenêtre périsistant sur plusieurs fenêtres 10 bureaux virtuels?

Les seules fonctions que je connais sont de la VirtualDesktopManager:

GetWindowsDesktopId() 
IsWindowOnCurrentVirtualDesktop() 
MoveWindowToDesktop() 

Est-il possible de le faire?

De même, existe-t-il un moyen de détecter quand un basculement de bureau a été initié? Parce que si c'est le cas, je pourrais toujours appeler IsWindowOnCurrentVirtualDesktop() et si la réponse est non, je pourrais appeler MoveWindowToDesktop() pour le placer là. On dirait que c'est un peu un hack, mais le travail serait fait si j'avais un moyen de détecter le changement de bureau.

Répondre

2

Vous pouvez détecter le changement de bureau virtuel, a trouvé un beau projet GitHub avec le code nécessaire, ainsi que d'autres fonctions qui traitent avec postes de travail virtuels dans Windows 10.

Virtual Desktop GitHub

Pour l'événement et simuler la fenêtre restant sur chaque bureau, vous pouvez faire ce qui suit.

VirtualDesktop.CurrentChanged += (o, e) => 
{ 
    this.Dispatcher.Invoke(() => 
    { 
     var h = new WindowInteropHelper(this).Handle; 

     if (!VirtualDesktopHelper.IsCurrentVirtualDesktop(h)) 
     { 
      this.MoveToDesktop(VirtualDesktop.Current); 
     } 
    }); 
}; 

Le Dispatcher.Invoke est nécessaire parce que l'événement est sur un thread différent alors celui UI, donc l'appel doit être au fil marshalée de l'interface utilisateur.