Frage

Ich mache eine WPF -Anwendung, die an einen der Kanten des Desktops angedockt werden kann. Ich mache dies, indem ich ein "EdgeWindow" habe, einem transparenten 5px -breiten Fenster am selben Rand des Bildschirms, wenn die Maus über das Fenster der Anwendung geht, wird erblutet.

Das Problem ist, dass der "EdgeWindow" zwar auf "oberste" Windows -Anwendungen eingestellt ist, das auch ihr Fenster auf "oberste" festlegt, was bedeutet, dass der EdgeWindow unter einigen Fenstern landen kann. Es scheint keine garantierte Möglichkeit zu geben, den EdgeWindow so weit ich zu beurteilen kann.

Meine Anwendung ist bereits eine 'ApplicationDesktoptoolbar (ähnlich wie http://www.codeprroject.com/kb/shell/csdoesshell3.aspx) Ich hatte also gehofft, dass es eine Möglichkeit geben könnte, diese Infrastruktur zu verwenden, um festzustellen, ob das Fenster die „EdgeWindow“ vollständig beseitigen sollte, aber ich konnte dort nichts sehen, was helfen würde.

War es hilfreich?

Lösung 2

Die Lösung, die ich verwendete, war das Hören auf Änderungen in der Mausposition und das Fenster, wenn es sich der Kante nähert. Natürlich funktioniert das normale WPF -Maushören nicht, wenn der Cursor außerhalb der Anwendung geht.

Das Original habe ich zu WH_MOUSE_LL geplant, aber es scheint, dass die Funktionalität in Windows 7 nicht gut funktioniert, da sie in Windows 7 ab und zu alle angehängten Haken aus irgendeinem Grund nicht registrieren.

Letztendlich habe ich 'rawInput' (http://www.codeprroject.com/kb/system/rawinput.aspx) verwendet, was ziemlich gut funktioniert. Das Beispiel zeigt nur, wie Sie Tastatureingangsereignisse abrufen, aber es war nicht so schwierig, es zu ändern, um stattdessen auf Mausereignisse zu hören.

Andere Tipps

Ich habe versucht, ein ähnliches Projekt eine Weile mit der Shappbar -Klasse zu machen. Wenn Sie die Shappbar -Klasse verwenden, die Sie sagen, sollten Sie kein unsichtbares oberste Fenster haben. Auch der Link zu dem Code, den Sie angegeben haben, scheint Folgendes zu enthalten:

GetAutoHideBar            = 0x00000007,    
// Registers or unregisters an autohide appbar for an edge of 

// the screen. 

SetAutoHideBar            = 0x00000008,    
// Notifies the system when an appbar's position has changed. 

WindowPosChanged          = 0x00000009,    
// Sets the state of the appbar's autohide and always-on-top 

// attributes.

SetState                  = 0x0000000a        

Funktioniert das nicht?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top