可以检测到任务栏移动吗?

时间:2012-05-19 03:04:04

标签: c# visual-studio-2010 taskbar

我有一个访问win32 API的类来提取任务栏的位置,大小,状态和边缘。我使用该类知道根据任务栏的位置创建警报的位置。我有一种方法可以根据任务栏何时生成或删除新警报来更新警报位置。

有没有办法检测任务栏何时移动,以便我可以调用更新方法?这样,如果用户移动任务栏,警报就会移动到适当的位置,而不是处于荒谬的位置,直到出现新警报或删除警报。

我的想法是定时检查我最后生成的当前任务栏对象,每隔一秒左右生成一个新对象,如果有什么变化则调用更新方法。我只是想知道是否有一种“更容易”或“更好”的方式来做到这一点。

(使用Visual Studio 2010 C#)

TL; DR需要检测任务栏何时移动以调用方法。

1 个答案:

答案 0 :(得分:-1)

一般的想法,你应该继承任务栏窗口。 正如您现在所做的那样,每个窗口都定义了一个WndProc(窗口过程),它处理系统或其他窗口发送的所有消息。

你不能直接访问这个功能但你可以使用正确的API(SetWindowLong),将消息流重定向到你选择的另一个WndProc函数(记得回调旧的WndProc以便目标窗口函数一般)。

通过这样做,您可以监控目标窗口收到的所有消息。特别是你的WM_MOVE消息。

这是一个简单的解释,我建议彻底阅读。

这是一个起始链接:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633569(v=vs.85).aspx