如何在没有 Windows 窗体的情况下接收即插即用设备通知

2023-12-11

我正在尝试编写一个类库,它可以捕获 Windows 消息,以便在设备已连接或删除时通知我。通常,在 Windows 窗体应用程序中,我只会重写 WndProc 方法,但在本例中没有 WndProc 方法。还有其他方法可以获取消息吗?


你需要一个窗户,没有办法解决这个问题。这是一个示例实现。为 DeviceChangeNotifier.DeviceNotify 事件实现事件处理程序以获取通知。在程序开始时调用 DeviceChangeNotifier.Start() 方法。在程序结束时调用 DeviceChangeNotifier.Stop()。请注意,DeviceNotify 事件是在后台线程上引发的,请务必根据需要进行锁定以保持代码线程安全。

using System;
using System.Windows.Forms;
using System.Threading;

class DeviceChangeNotifier : Form {
  public delegate void DeviceNotifyDelegate(Message msg);
  public static event DeviceNotifyDelegate DeviceNotify;
  private static DeviceChangeNotifier mInstance;

  public static void Start() {
    Thread t = new Thread(runForm);
    t.SetApartmentState(ApartmentState.STA);
    t.IsBackground = true;
    t.Start();
  }
  public static void Stop() {
    if (mInstance == null) throw new InvalidOperationException("Notifier not started");
    DeviceNotify = null;
    mInstance.Invoke(new MethodInvoker(mInstance.endForm));
  }
  private static void runForm() {
    Application.Run(new DeviceChangeNotifier());
  }

  private void endForm() {
    this.Close();
  }
  protected override void SetVisibleCore(bool value) {
    // Prevent window getting visible
    if (mInstance == null) CreateHandle();
    mInstance = this;
    value = false;
    base.SetVisibleCore(value);
  }
  protected override void WndProc(ref Message m) {
    // Trap WM_DEVICECHANGE
    if (m.Msg == 0x219) {
      DeviceNotifyDelegate handler = DeviceNotify;
      if (handler != null) handler(m);
    }
    base.WndProc(ref m);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有 Windows 窗体的情况下接收即插即用设备通知 的相关文章

  • 数据结构的优化存储以实现快速查找和持久化

    Scenario 我有以下方法 public void AddItemSecurity int itemId int userIds public int GetValidItemIds int userId 最初我正在考虑表单上的存储 i
  • ASP.NET 会员电子邮件验证

    尝试基于 C 创建电子邮件验证本文 https web archive org web 20211020153319 https www 4guysfromrolla com articles 062508 1 aspx 我创建了一个 ja
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

    你好 我有一个非常简单的网络表单 我在此表单上有一个按钮和一个网格视图 以及一个包含链接表 bill docket docket bill 等的数据集 在按钮上单击我使用以下代码 protected void button click ob
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 是否可以获取指向装箱非托管值类型的指针?

    是否可以获取指向装箱非托管值类型的指针 而无需编写对每个支持的类型进行强制转换的大型 switch 语句 就像是 object val Contains a boxed unmanaged value such as int long by
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 如何将对 System.Data.DataSetExtensions 的引用添加到网站 ascx.cs 文件?

    我们正在处理一个网站项目并尝试参考System Data DataSetExtensions 使用 Web 应用程序会更好 不过 技术主管有她的理由 这是我们尝试过的 找到装配路径 打开 Visual Studio 命令提示符并运行sn e
  • Xamarin.Android JmDNS 绑定问题

    我开始研究 Xamarin Android 的 JmDNS 绑定 我设法构建了绑定 但无法从代码中引用它 https github com ytn3rd monodroid bindings tree master JmDNS https
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • 来自资源中 ImageSource 的 System.Drawing.Image

    我的问题与这个非常相似 wpf图像资源以及运行时在wpf控件中更改图像 https stackoverflow com questions 940592 wpf image resources and changing image in w
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 如何正确地将十六进制转义添加到字符串文字中?

    当你有C语言的字符串时 你可以在里面直接添加十六进制代码 char str abcde a b c d e 0x00 char str2 abc x12 x34 a b c 0x12 0x34 0x00 这两个示例在内存中都有 6 个字节
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • 在 C++ 程序中使用多个 .cpp 文件?

    我最近从 Java 转向 C 但现在当我编写应用程序时 我对在主函数中编写所有代码不感兴趣 我希望在主函数中调用另一个函数 但这个另一个函数位于另一个 cpp 文件中 如果你不明白 让我更好地解释一下 我有一个文件 main cpp在它里面
  • Shiny - 使用基于输入的过滤数据填充静态 HTML 表

    我目前正在开发一个 Shiny 应用程序 它显示一个静态 HTML 表格 由于 HTML 代码的大小 该表格源自另一个文件 该表使用空数据表进行初始化 以便呈现空表 上面的HTML表格都是正常的selectizeInput在后台过滤数据表的
  • android imageView:设置拖动和捏缩放参数

    我目前正在为 Android 我的第一个应用程序 开发一个应用程序 它可以让用户查看地铁地图并能够进行缩放和拖动 我目前正在修改 Hello Android 第 3 版中的代码 并让捏缩放和拖动功能正常工作 我使用 Matrix 作为布局比
  • 如何在 Liferay 6 中以编程方式创建结构和模板

    我需要通过 java 代码以编程方式创建结构和模板 我使用了以下代码片段 结构 public void createStructure String userName long userId log info Inside create s
  • 用户“homestead”@“localhost”的访问被拒绝(使用密码:YES)

    我在 Mac OS Yosemite 上使用 Laravel 5 0 当在我的local环境 我跑php artisan migrate我不断得到 用户 homestead localhost 的访问被拒绝 使用密码 YES 配置 这是我的
  • 关闭 PHP 和 MySQL 上的警告和错误

    我收到了预期的通知和警告 并想在我的 PHP 文件中将其关闭 错误是 Warning fsockopen 并且通知内容是 Notice A non well formed numeric value encountered in 我计划对此
  • 为 hibernate 和 @Transactional 配置 spring 数据源

    目前 我正在使用带有 Transactional 注释的 DriverManagerDataSource 来管理事务 但所有事务都非常非常慢 可能是因为数据源每次打开和关闭与数据库的连接 我应该使用什么数据源来加速交易 我在我的应用程序中结
  • InteropBitmap 到 BitmapImage

    我正在尝试转换Bitmap SystemIcons Question to a BitmapImage所以我可以在 WPF Image 控件中使用它 我有以下方法将其转换为BitmapSource 但它返回一个InteropBitmapIm
  • 如何将参数传递给事件触发器wpf中存在的方法

    实际上 我试图在 Xaml 文件的 ViewModel 中存在的方法 UpdateWord object obj 中传递单词文档的名称 这样就可以打开word文档了
  • 即使遵循了最佳实践,仍然不断达到 GitHub 二级速率限制?

    在我的应用程序中 我使用令牌向 GitHub 搜索 API 发出经过身份验证的请求 我每 2 秒发出一次请求 以保持在每分钟 30 个请求的主要速率限制内 因此不是同时进行 并且在进行实际的搜索 API 调用之前 我还会使用 GitHub
  • 确定 PHP 中缩短的 URL 的最终目的地?

    我怎样才能在 PHP 中做到这一点 例如 bit ly f00b4r gt http www google com search q cute kittens 在Java中 解决方案是这样的 您应该发出 HEAD 请求 使用 HttpWeb
  • 第二个重写规则在 htaccess 中不起作用并显示 404 未找到页面

    嗨 我有这样的链接 www example com a letter a 1 html www example com b letter b 1 html a字母和b字母文件夹下还有3个文件 我删除了a letter包含以下 htacces
  • C# - 转换 8 位或 16 位灰度原始像素数据

    我需要能够将 8 位或 16 位灰度像素数据转换为 NET 框架可以支持的文件格式 我拥有的可用数据是宽度 高度 方向 左下角 和像素格式 即 4096 级灰度 12 位分辨率 每个像素封装为 2 个字节 例如每个像素的范围是 0 到 40
  • HTML 输入忽略 flex-basis CSS 属性 [重复]

    这个问题在这里已经有答案了 不知何故 输入无法正确感知弹性基础 这是一个最简单的示例 说明输入如何不服从并跨越其父块之外 请参阅jsfiddle div div
  • 如何覆盖!重要? [复制]

    这个问题在这里已经有答案了 我编写了一些 html 并将一些 css 样式注入到第三方网站中 但 他们的风格与我的风格相混淆由于一些 important声明 我不想这样 也不想在我的风格中使用 important 我可以做什么来防止这种情况
  • 无法备份 docker 卷

    我正在遵循官方 docker 指南here备份 docker 卷 我也知道这个问题但是我仍然遇到错误 运行以下命令 docker run rm volumes from dbstore v pwd backup ny db 1 tar cv
  • 无法读取 aws 设备场中的属性文件

    我的 Appium JUnit 测试在本地工作得很好 但在 aws 上找不到属性文件 我的测试放在下面src test java和测试中使用的属性文件src test resources locale 包含依赖项内容的 Zip app 0
  • 如何使用 Windows PowerShell 从 MariaDB 转储文件导入数据 [重复]

    这个问题在这里已经有答案了 我尝试使用以下命令在 Windows Powershell 中导入 dumpfile sql mysql u root p database database lt Backup sql 但我收到以下错误 At
  • 在 CodeBuild maven 作业中使用适当的 ECS 凭证

    我尝试在 mvn 命令中使用 CodeBuild 服务角色 但它似乎没有获取适当的 IAM 权限 我在用s3 wagon 私人插件它似乎使用了最新版本DefaultAWSCredentialsProviderChain包括EC2Contai
  • 如何在没有 Windows 窗体的情况下接收即插即用设备通知

    我正在尝试编写一个类库 它可以捕获 Windows 消息 以便在设备已连接或删除时通知我 通常 在 Windows 窗体应用程序中 我只会重写 WndProc 方法 但在本例中没有 WndProc 方法 还有其他方法可以获取消息吗 你需要一