【发布时间】:2011-03-04 05:10:49
【问题描述】:
我有一个非 MFC、非 ATL C++ 应用程序,它会定期在系统托盘图标上创建通知气球。如果在 Vista 之前的盒子上,用户锁定了屏幕 - 这些新创建的“balloons are queued”,当用户最终重新登录时会造成混乱。可能有数十或数百个气球在等待。在用户重新登录之前,为每个气球设置的超时时间不适用!!
所以要解决这个问题,我需要知道:
- 有没有办法在新气球到达时取消我制作的任何未完成的气球?
- 我是否应该检查“会话锁定”/“屏幕锁定”并在用户不在时停止创建气球?
关于选项#2,我在 Windows 循环中监听什么消息来捕获帐户锁定/会话锁定?我尝试了事件 WM_ENDSESSION,但我的应用表现得好像它没有看到它。那是正确的事件吗?我需要注册吗?
当然,如果有更简单的方法来解决这个问题,我很想知道。当然对于 Vista 和更高版本,NIF_REALTIME uFlags 选项可以轻松解决问题。
附言我很震惊,我无法在网上找到带有描述的 Windows 消息列表。我只找到了一个list without descriptions,它甚至不是由微软托管的!!!
【问题讨论】:
-
对于一个相当大(但仍不完整)的窗口消息分类列表:msdn.microsoft.com/en-us/library/ms644927.aspx#system_defined
-
你为什么要制作几十个或几百个气球?我认为你的申请会让我发疯。
-
@Luke:每小时有六个气球,然后从“测试机”注销两周假期。回来“气球狂热”。
-
出于好奇,为什么需要每 10 分钟显示一个气球?恕我直言,这是对通知区域的滥用(msdn.microsoft.com/en-us/library/aa511497.aspx)。至于您的问题,您应该将气球内容分离到一个单独的应用程序中,以便在用户注销时退出。但是,并不能解决用户离开计算机一个小时的问题。
-
@Luke:更准确地说,我没有“需要”大量气球。它是一个包裹在遗留代码上的精简 UI,我无法更改其消息传递,我只被允许修复这个特定的错误。 ://
标签: c++ windows winapi system-tray balloon