0

一点背景知识,我正在尝试校准一个 USB 加速度计,它在从 USB 驱动器中取出的那一刻开始计时,我怀疑计时有点不对,这导致了我的问题......

有没有办法查看设备被移除的确切时间?

我可以以毫秒为单位处理时间,这是可以使用 c# 以编程方式解决的问题,还是 Windows 7 中某处有日志?我愿意接受任何解决方案。

4

1 回答 1

1

您可以编写一个简单的 C# 应用程序并订阅系统的设备节点更改的 Win API 通知。

API 函数RegisterDeviceNotification允许您订阅您的应用程序或服务,以便在设备发生更改(即热插拔或拔出)时由 Windows 通知。

您的 C# 应用程序必须在启动时调用 register 方法,然后应用程序必须在应用程序的 WndProc中处理WM_DEVICECHANGED事件。根据您选择编写 WPF 应用程序还是 WinForms 应用程序,访问 WndProc 的方式会略有不同。

WM_DEVICECHANGED 消息将 WParam 设置为特定值,具体取决于设备是刚刚插入、正在移除还是完全移除。在您的情况下,您可能希望使用DBT_DEVICEREMOVECOMPLETE消息。

然后,您可以让您的 C# 应用程序记录设备被移除的确切时间。请注意,时间戳的准确性将取决于实际移除设备与您的应用程序接收和处理通知之间存在的延迟。没有可用的系统级时间戳,因此必须这样做。但它应该在“几”毫秒内准确。

于 2013-02-16T18:01:56.323 回答