“休眠”应用程序有七种方式可以成为“活动”应用程序,基于它是最小化还是简单模糊的组合,以及是否通过alt-tab,鼠标重新激活它点击它的图标,通过从另一个程序发送一个Windows消息重新激活,或者当关闭(或最小化)模糊应用程序时,它被简单地“发现”为桌面上最顶层的应用程序。
在所有情况下,我都需要知道我的应用程序现在是活动的(例如桌面上最顶层的)应用程序,以便我可以从数据库刷新其数据。
我确实知道应用程序“知道”它们是最顶级的,因为我可以看到边框一旦变为最顶端就会变为活动颜色。
如果我捕获WM_ACTIVATE_APP消息,这大部分时间都有效,但是当我的应用程序被最小化并恢复到活动状态时似乎没有。
我需要被告知,在用户执行任何操作之前,我的应用程序现在是最顶级且最活跃的。
有什么建议吗?谢谢,戴夫
答案 0 :(得分:0)
尝试以下方法:
经过这样的时间后,数据库中的数据应被视为过时,请在窗口(或WinForms等效项)上调用InvalidateRect()。如果您的窗口没有被遮挡,它将立即获得WM_PAINT。但是如果窗口被完全遮挡,它就不应该获得WM_PAINT直到OS实际需要显示它 - 即当移动模糊窗口时。刷新数据库中的数据以响应WM_PAINT消息。
答案 1 :(得分:0)
经过调查,我找到了问题的原因和解决方法。
我发现WM_ACTIVATEAPP
消息正在发送(并已收到)确定,但这发生在应用仍处于最小化状态时(即在恢复之前)。
因为我有一个if
测试,当应用程序被最小化时没有做任何事情(这是没有意义的,因为用户看不到结果!),没有采取任何行动。
当应用程序“未被覆盖”时,WM_ACTIVATEAPP
消息 被发送,这是可以的,因为应用程序未被最小化。
我现在也回应WM_WINDOWPOSCHANGED
在恢复时被解雇,
这个组合似乎涵盖了我的应用程序可以重新激活的所有七种方式。