繁体   English   中英

C#停靠在桌面边缘,弹出问题

[英]C# Docking to the edge of a desktop, popup issue

我正在制作可以停靠在桌面边缘之一的WPF应用程序。 我通过在屏幕的同一边缘上有一个“ EdgeWindow”(一个5px透明的透明窗口)来做到这一点,每当鼠标移到那个窗口上时,应用程序的窗口就会弹出。

问题在于,尽管“ EdgeWindow”设置为“ Topmost”,其他Windows应用程序也将其窗口设置为“ Topmost”,这意味着EdgeWindow可能最终出现在某些窗口下方。 据我所知,似乎没有保证将EdgeWindow保持在顶部的方法。

我的应用程序已经是一个'ApplicationDesktopToolbar'(类似于http://www.codeproject.com/KB/shell/csdoesshell3.aspx ),因此我希望可以通过某种方式使用该基础结构来确定窗口是否应该弹出并摆脱完全是“ EdgeWindow”的一部分,但我看不到有任何帮助。

我曾经尝试使用ShAppBar类来做一个类似的项目。 如果您使用的是ShAppBar类(即您说的是),则不必有一个不可见的最顶层窗口。 另外,您提供的代码的链接似乎包含以下内容:

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        

这行不通吗?

我最终使用的解决方案是侦听鼠标位置的任何变化,并在鼠标靠近边缘时弹出窗口。 当然,当光标移到应用程序外部时,正常的WPF鼠标侦听将不起作用。

我最初计划使用WH_MOUSE_LL,但似乎该功能在Windows 7中无法正常运行,因为在Windows 7中,它们出于某种原因会不时注销所有连接的钩子。

最终,我最终使用了“ RawInput”(http://www.codeproject.com/KB/system/rawinput.aspx),它效果很好。 该示例仅显示了如何检索键盘输入事件,但对其进行更改以侦听鼠标移动事件并不难。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM