如何在没有窗口句柄的情况下使用 RegisterDeviceNotification?

2024-03-20

我正在编写一个 DLL 库,该库使用 VB.NET 中的 winusb 连接到 USB 设备。

由于它是一个 DLL,所以我没有窗口,而且我的库的用户也可能没有窗口(例如命令行应用程序)。

我见过的检测设备连接和分离的示例都使用RegisterDeviceNotification这需要一个窗口句柄来接收附加/分离消息。

如何在没有窗口来获取句柄的情况下直接将这些消息接收到函数中?


我最近发现了一个对于没有 GUI 的应用程序来说似乎比 RegisterDeviceNotification 更优雅的解决方案。

    void onEventArrived(object sender, EventArrivedEventArgs e)
    {
        ManagementBaseObject _o = e.NewEvent["TargetInstance"] as ManagementBaseObject;

        if (_o != null)
        {
            using (ManagementObject mo = new ManagementObject(_o["Dependent"].ToString()))
            {
                if (mo != null)
                {
                    try
                    {
                        if (mo.GetPropertyValue("DeviceID").ToString() != string.Empty)
                        {
                            //connected
                        }
                    }

                    catch (ManagementException ex)
                    {
                        //disconnected
                    }
                }
            }
        }
    }

通过调用初始化此代码

        System.Management.WqlEventQuery _q = new WqlEventQuery("__InstanceOperationEvent", "TargetInstance ISA 'Win32_USBControllerDevice' ");
        _q.WithinInterval = TimeSpan.FromSeconds(1);
        ManagementEventWatcher _w = new ManagementEventWatcher(_q);
        _w.EventArrived += new EventArrivedEventHandler(onEventArrived);
        _w.Start();

另请确保添加对 System.Management 的引用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有窗口句柄的情况下使用 RegisterDeviceNotification? 的相关文章

  • MongoDb 注册类映射

    我有以下代码 我希望 MiscellaneousData 覆盖抽象的 MiscellaneousDataBase 然而 IdMemberMap 总是出现空值 使用独立的 正常 类是可行的 if BsonClassMap IsClassMap
  • Powershell - 在不安装 Excel 的情况下将 CSV 转换为 XLS

    我有一台自动生成报告的服务器 报告采用 CSV 格式 我需要能够直接加密文件 无需第三方压缩 无 WinZIP 或 WinRAR 我认为最好的想法是将 CSV 转换为 XLS 然后通过 Powershell 密码保护 XLS 文件 不幸的是
  • 在 C# 中将 ANSI (Windows 1252) 转换为 UTF8

    I ve 之前问过这个 https stackoverflow com q 4351985 398713之前在 Stack Overflow 上以一种迂回的方式 这次想把它做好 如何将 ANSI 代码页 1252 转换为 UTF 8 同时保
  • 使用 XML 的 WCF 请求验证

    我有一个WCF使用 Net 4 0框架的SOAP Web服务 我在用contract first方法 即 服务代码是使用 WCSF Blue 工具从手写 WSDL 生成的 我对请求消息有以下要求 如果价格小于 100 则不得有税项 但如果大
  • ASP.net 出现错误“访问路径被拒绝”。尝试将文件上传到我的 Windows Server 2008 R2 Web 服务器时

    我有一个 ASP NET Web 应用程序 它将文件上传到 Web 服务器上的特定文件夹 本地一切工作正常 但是当我将应用程序部署到 Web 服务器时 我开始收到错误 访问路径 D Attachments myfile doc 被拒绝 我向
  • 限制 LDAP 查询中返回的属性

    如何限制通过 System DirectoryServices 在 LDAP 查询中返回的属性 我一直在使用 DirectorySearcher 并将我想要的属性添加到 DirectorySearcher PropertiesToLoad
  • 合并两个(或更多)PDF

    背景 我需要为我的销售人员提供每周报告包 该包包含几个 5 10 个水晶报告 Problem 我想允许用户运行所有报告并且只运行单个报告 我想我可以通过创建报告然后执行以下操作来做到这一点 List
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • SQL存储过程执行时间差异

    我在 win form 应用程序中遇到奇怪的问题 我正在调用一个存储过程 并且执行大约需要 6 秒 此存储过程接受多个参数 包括一个输出参数 从应用程序级别我使用 Dim dt1 DateTime Now cmd ExecuteNonQue
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • WPF 还是 WinForms 作为内部工具?

    在我的公司 我们开发了许多内部工具 从简单的实用程序到成熟的编辑器 这些工具的首要任务是稳定性 可用性和周转时间 意味着添加新功能的速度 到目前为止 我们一直在使用 WinForms 但有几个新工具正在酝酿中 我正在权衡是否应该继续使用 W
  • 使用 JSON.net 反序列化

    我对 json JSON net 等都很陌生 在这里阅读类似的问题后 我无法让我的代码工作 我的错误到底是什么 我监督了什么 出于测试目的是否可以跳过 链接 和 元 类 或者我是否必须定义每个属性 我得到以下 REST 输出 codes h
  • 当用户尝试打开新实例时返回到已打开的应用程序

    这是我有一段时间想不通的问题 防止第二个实例很简单并且有很多方法 但是恢复已经运行的进程则不然 我想 最小化 撤消最小化并将正在运行的实例置于最前面 在其他窗口后面 将应用程序置于最前面 我使用的语言是 VB NET 和 C 我发现这段代码
  • 如何从进程开始捕获所有应用程序/窗口消息? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我试图弄清楚如何捕获进程 窗口的所有窗口消息 从它在 c 中启动时开始 该过程不是我自己的 所以我需要使用某种钩子 我的目标是开始实时
  • 将对象列表添加到 ef 中的上下文

    是否可以在不使用 foreach addObject 的情况下将对象列表添加到实体框架中的 Context 感谢帮助 从 EntityFramework 6 开始 您可以使用DbSet AddRange 方法 IEnumerable htt
  • 我是唯一一个收到“当前目标框架中不可用的程序集”的人吗?

    在添加测试项目后 我在使用 Visual Studio 2010 和任何报告此错误的框架版本时遇到了一个持续存在的问题 当前目标框架中不提供程序集 到目前为止 我只在两个程序集上发生过这种情况 并且始终一致 系统服务流程 系统 配置 安装
  • DLL 中的 GUID (.Net)

    我在这方面不是很有经验 所以我有几个问题 首先 所有 Net 创建的 DLL 是否都有自己的 GUID 如果没有 我的问题是如何获得一个并将其与 DLL 关联 那么问题是 我如何获得该 dll 的 GUID 即 给定 DLL 路径 c so
  • 数据读取过程中遇到致命错误

    我正在进行定期更新表扫描 Using connect1 As New MySqlConnection ConnectLocalhost serverString connect1 Open Dim cmd New MySqlCommand
  • 需要将用户名和密码添加到 VB.NET Web 服务客户端中的 SOAP 标头

    我需要查询一个进行基本身份验证的 Web 服务 将用户名和密码放在请求标头中 我的客户端是用 VB NET Visual Basic Express Edition 2010 编写的 我已将 Web 服务添加到服务引用中 它为我自动生成了合

随机推荐