【问题标题】:Detect USB - Insert/Remove - VB.NET on Windows CE 6.0检测 USB - 插入/移除 - Windows CE 6.0 上的 VB.NET
【发布时间】:2025-12-07 02:00:02
【问题描述】:

我正在疯狂地试图弄清楚如何解决这个任务。我的目标很简单,每次插入 U 盘时复制一个文件,然后松开 U 盘,关闭 LED。最好的解决方法是什么?

1) 我找到了这篇文章

http://geekswithblogs.net/BruceEitman/archive/2008/06/13/windows-ce-monitoring-for-disk-insertion-to-add-support-for.aspx

http://geekswithblogs.net/BruceEitman/archive/2008/06/13/windows-ce-monitoring-for-disk-insertion-to-add-support-for.aspx

但我无法在 VB.NET 项目中翻译它。

2) 然后我读到足以将 RequestDeviceNotifications 用于块设备。但是如何在 VB.NET 中做到这一点?

如果可能,我想避免使用 OpenNetCF。

谢谢

【问题讨论】:

    标签: vb.net compact-framework usb-drive


    【解决方案1】:

    由于您不想“使用 OpenNETCF”,我假设您不想使用任何未内置于 CF 的库或功能。我们将跳过那种愚蠢的论点和“你的时间价值”的讨论,并将其作为一项要求。

    你需要做的是:

    1. 使用 P/Invoke 呼叫 CreateMsgQueue。这会给你一个句柄。为了完整性,您可能还需要执行 CloseMsgQueue
    2. P/Invoke RequestDeviceNotifications 并将上面 #1 返回的句柄连同 DEVCLASS GUID value 一起传递给您想要的设备通知 - 可能是 STORE_MOUNT_GUID。同样,为完整性添加 StopDeviceNotifications 是个好主意。
    3. 此时,每当插入或删除发生时,您都会在队列中收到一条消息。然后调用ReadMsgQueue 以获取消息中的DEVDETAIL 数据。
    4. 解析 DEVDETAIL 并查看 fAttached 成员。

    【讨论】:

    • 我确信 OpenNETCF 是紧凑框架的一个很好的附加组件,但我正在开发一个用于工业用途的应用程序,它应该可以 24/7 无问题地运行,并且我在 CF 之外已经有很多库.你知道每 X 行代码都有 Y 错误,如果可能的话,我会尽量避免添加很多其他东西……这在我看来是一个非常基本的功能,而且看起来“愚蠢”?对我来说,CF 并没有提供简单的方法。
    • CF 没有提供很多功能(这是创建 SDF 的主要驱动程序)。上述步骤将为您提供所需的通知 - 这确实是唯一的方法。它并不像您希望的那样简单。
    • 是的,你说得对。但是……最后我放弃了 OpenNetCF。看来 CF 的限制太深了,我不能花这么多时间来解决所有这些功能......谢谢
    【解决方案2】:

    我要花点时间为你写这个,所以你需要自己做。

    开始编写项目,为您需要的调用找到 P/Invoke 例程(如 FindFirstFileCreateProcess)。在 SO 上,请查看 Storage Card Problem In windows mobileHow to register form for WM_DEVICECHANGE message in windows mobile

    如果你找不到一个你无法拨打的特定电话,你只会死在水中。

    在您完成项目时,发布(或搜索)您遇到的实际问题。

    否则,听起来您是在要求某人编写项目并将其交给您。

    【讨论】:

    • 谢谢。我不是要别人为我写代码,只是寻找教程和/或代码的 sn-p 来做这些事情!