【问题标题】:Killing Queued Notification Balloons (Pre-Vista)杀死排队的通知气球(Vista 之前)
【发布时间】:2011-03-04 05:10:49
【问题描述】:

我有一个非 MFC、非 ATL C++ 应用程序,它会定期在系统托盘图标上创建通知气球。如果在 Vista 之前的盒子上,用户锁定了屏幕 - 这些新创建的“balloons are queued”,当用户最终重新登录时会造成混乱。可能有数十或数百个气球在等待。在用户重新登录之前,为每个气球设置的超时时间不适用!!

所以要解决这个问题,我需要知道:

  1. 有没有办法在新气球到达时取消我制作的任何未完成的气球?
  2. 我是否应该检查“会话锁定”/“屏幕锁定”并在用户不在时停止创建气球?

关于选项#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


【解决方案1】:

关于选项(2),您需要使用函数WTSRegisterSessionNotification注册对“SessionNotifications”的兴趣:

WTSRegisterSessionNotification(HWND hWnd, DWORD dwFlags);

您将句柄传递给窗口以接收消息WM_WTSSESSION_CHANGE,并使用标志 NOTIFY_FOR_THIS_SESSION,这表明您希望在会话事件发生时获取消息。

您会感兴趣的会话事件是 WTS_SESSION_LOCK 和 WTS_SESSION_UNLOCK。请记住一定要使用对应的注销函数WTSUnRegisterSessionNotification

WTSUnRegisterSessionNotification(HWND hWnd);

您需要跟踪会话的锁定/解锁/连接/断开状态,这使您可以决定何时安排气球消息。

【讨论】:

  • 好东西。我认为我现在的问题显然是这种方法不适用于 Windows 2000。所以现在我正在查看 WinLogin 通知包http://technet.microsoft.com/en-us/library/cc721961(WS.10).aspx。当然,我仍然对我列出的解决“方法 #1”的解决方案感兴趣。换句话说,为什么那些气球不能自己管理?
  • Winlogon 通知包在 Vista 中已弃用。在显示气球之前,您可以调用 GetLastInputInfo();如果最后一次用户输入是在 X 分钟之前,则不会显示气球。
  • @Brend Arias - 没错,这仅支持 Windows XP 及更高版本。如果您想要支持 Windows 2000 的东西 - 您可以查看“系统事件通知服务”(SENS)。这里有一个演示应用程序 - support.microsoft.com/kb/321381 Win2K 及更高版本支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多