1

我正在制作一个可以停靠在桌面边缘之一的 WPF 应用程序。我通过在屏幕的同一边缘设置一个 5px 宽的透明窗口“EdgeWindow”来做到这一点,只要鼠标移过该窗口,就会弹出应用程序的窗口。

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

我的应用程序已经是一个“ApplicationDesktopToolbar”(类似于http://www.codeproject.com/KB/shell/csdoesshell3.aspx)所以我希望可能有某种方法可以使用该基础设施来确定窗口是否应该弹出并摆脱完全“EdgeWindow”,但我看不到任何有帮助的东西。

4

2 回答 2

1

我最终使用的解决方案是监听鼠标位置的任何变化,如果它靠近边缘则弹出窗口。当然,当光标移出应用程序时,普通的 WPF 鼠标监听将不起作用。

最初我计划使用 WH_MOUSE_LL 但似乎该功能在 Windows 7 中无法正常工作,因为在 Windows 7 中,他们不时出于某种原因取消注册任何附加的挂钩。

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

于 2011-01-29T00:09:13.367 回答
0

我尝试使用 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        

这不起作用吗?

于 2011-01-20T22:00:49.613 回答