Domanda

Sto facendo un'applicazione WPF che può essere agganciata ad uno dei bordi del desktop. Lo faccio avendo un 'EdgeWindow' che è una grande finestra trasparente 5px sullo stesso bordo dello schermo, quando il mouse passa sopra che quindi la finestra dell'applicazione si aprirà.

Il problema è che, mentre il 'EdgeWindow' è impostato su altre applicazioni di Windows 'Topmost' anche impostato la loro finestra per 'Topmost' che significa che l'EdgeWindow può finire sotto alcune finestre. Non sembra essere un modo garantito per mantenere l'EdgeWindow sulla parte superiore, per quanto posso dire.

La mia domanda è già un 'ApplicationDesktopToolbar (simile a http: //www.codeproject. com / KB / coperture / csdoesshell3.aspx ) quindi speravo ci potrebbe essere qualche modo utilizzando tale infrastruttura per determinare se la finestra deve popup e di sbarazzarsi del 'EdgeWindow' del tutto, ma non riuscivo a vedere niente lì che avrebbe aiutato.

È stato utile?

Soluzione 2

La soluzione che ho finito per usare era per ascoltare di eventuali modifiche di posizione del mouse e pop-up della finestra, se si avvicina al bordo. Naturalmente, normale WPF ascolto del mouse non funzionerà quando il cursore passa al di fuori dell'applicazione.

Original ho pensato di WH_MOUSE_LL ma sembra che la funzionalità non funziona bene in Windows 7 dal momento che in Windows 7 che annullare la registrazione di eventuali ganci fissati ogni ora e poi per qualche motivo.

In definitiva ho finito per usare 'RawInput' (http://www.codeproject.com/KB/system/rawinput.aspx), che funziona piuttosto bene. L'unico esempio mostra come recuperare eventi di input tastiera, ma non era così difficile da cambiare per ascoltare gli eventi del mouse si muovono invece.

Altri suggerimenti

Ho provato a fare un progetto simile un po 'utilizzando la classe ShAppBar; se si utilizza la classe ShAppBar, che dici di essere, non ci dovrebbe essere bisogno di avere una finestra di primo livello invisibile. Anche il link per il codice che hai fornito sembra contenere la seguente:

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        

Ciò non lavoro?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top