【问题标题】:system_tray to receive notifications of device removalsystem_tray 接收设备移除通知
【发布时间】:2012-06-28 17:29:34
【问题描述】:

我正在编写一个应用程序来检查我的 USB 设备,如果该设备可用,则进行拨号连接。我使用Rasdial 建立连接。不幸的是,如果我移除 USB 电缆,连接不会断开或通知用户。所以在这里 我正在检查device removal

我计划在系统托盘中运行我的应用程序并等待设备移除。我在吗?

如果我知道如何让应用程序等待设备移除,目前我的控制台应用程序会在拨号连接建立后退出。如何在 Winapi32 中实现这一点?我用 C 编码。

【问题讨论】:

  • 标题似乎与实际问题不符(我相信这与您之前的问题重复?)请更新问题或标题以适合。
  • 更好。系统托盘仍然没有进入它,因为这纯粹是一个 UI 选择。
  • 不,我的问题属于系统托盘。我希望我的应用程序位于系统托盘中并监视设备移除。我当前的应用程序中根本没有 UI...
  • 正如我所说,系统托盘与您是否可以接收设备断开连接通知无关。如果registerdevicenotification() you've used before 没有帮助,我不知道您如何注册接收它们。

标签: c# c winapi device-driver systray


【解决方案1】:

您的窗口可以处理WM_DEVICECHANGE 广播消息,以告知何时发生了变化。如果您需要更详细的信息,请使用RegisterDeviceNotification()

使用系统通知区域与您使用这些方法的能力无关。它们都需要一个窗口来发送通知,但它可以保持隐藏状态。

【讨论】:

  • 如果我隐藏窗口就像运行我的应用程序背景一样?只是为了获得窗口句柄,我去了系统托盘。但你的意思是即使我也能避免这种情况?如果错了,请纠正我..
  • 嗯,系统通知托盘需要一个窗口来将其消息发送回。它不会神奇地给你一个。
  • 这个评论可能听起来不适合这篇文章,如果是的话,请原谅我.. 有没有办法使用“registerdevicenotifcation”找到我的设备插入/移除。你能给我一些建议吗?
  • 这取决于您如何识别您的设备。该 API 可以过滤设备类,您可以通过它发送给您的信息来检测实际设备。
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
相关资源
最近更新 更多