【发布时间】:2012-05-19 03:04:03
【问题描述】:
我有一个类可以访问 win32 API 以获取任务栏的位置、大小、状态和边缘。我使用该类来了解在哪里创建警报,具体取决于任务栏的位置。我有一种方法可以根据任务栏何时生成或删除新警报来更新警报位置。
有没有办法检测任务栏何时移动以便我可以调用更新方法?这样,如果用户移动任务栏,警报就会移动到适当的位置,而不是在一个荒谬的位置,直到出现新警报或删除一个警报。
我的想法是让计时器检查我上次生成的当前任务栏对象,每隔一秒左右使用一个新对象,如果有变化则调用更新方法。我只是想知道是否有“更简单”或“更好”的方法来做到这一点。
(使用 Visual Studio 2010 C#)
TL;DR 需要检测任务栏何时移动以调用方法。
【问题讨论】:
-
没有。只是不要,用户不会经常移动任务栏。使用 ABM_GETTASKBARPOS Pinvoke SHAppBarMessage() 以找出栏的位置以定位新的警报窗口。如果您想在计时器滴答声中执行此操作,那么这并没有什么问题,只要您不是每毫秒都执行一次。
-
完成此操作的正确方法是在显示警报之前立即询问任务栏位置。在移动任务栏或使用计时器时收到通知将完全没有必要。
-
我已经让它在应用程序启动或生成/删除新警报时查看任务栏位置,然后更新警报的位置。我的问题是这个警报系统将很少使用,但警报可能会在用户计算机上的屏幕上保留一段时间,直到问题结束。因此,任务栏移动但警报不移动的可能性可能是人们会抱怨的问题。
-
在我的情况下不需要轮询。我们有一个应用程序覆盖了大部分屏幕,除了屏幕每个边框上的几个像素。如果鼠标移动到隐藏它的边缘,这个小边框允许显示任务栏。 SHAppBarMessage 将满足我的需要,但我想将其设置为在任务栏移动时触发,无论是取消隐藏、移动到属性中的另一个边缘还是调整大小。简单地说你的普通用户不会定期做这些事情是不可接受的。
标签: c# visual-studio-2010 taskbar