https://mp.weixin.qq.com/s/_SQVTQH-ReBwLby-fmWbfg
在許多應用場景中,能夠實時檢測USB裝置的插入和移除對於提高使用者體驗和程式的響應性至關重要。本文將介紹如何在Windows環境下,使用C#編寫一個簡單的程式來監聽USB裝置的插入和移除事件。
前提條件
為了跟隨本教程,您需要具備以下條件:
-
基本的C#程式設計知識。
-
Visual Studio或其他C#開發環境。
-
Windows作業系統。
實現步驟
步驟 1: 建立專案
首先,在Visual Studio中建立一個新的Windows窗體應用專案。選擇C#作為程式語言。
步驟 2: 編寫程式碼
在專案的主窗體程式碼檔案(例如Form1.cs
)中,新增以下程式碼:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public partial class Form1 : Form
{
// 定義Windows訊息常量
private const int WM_DEVICECHANGE = 0x0219;
private const int DBT_DEVICEARRIVAL = 0x8000; // 裝置插入
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // 裝置移除
// 裝置通知註冊函式
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, IntPtr NotificationFilter, uint Flags);
public Form1()
{
InitializeComponent();
RegisterDeviceNotification();
}
private void RegisterDeviceNotification()
{
// 這裡簡化處理,直接使用NULL註冊所有裝置的通知
RegisterDeviceNotification(this.Handle, IntPtr.Zero, 0);
}
// 重寫WndProc方法來處理自定義訊息
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_DEVICECHANGE)
{
switch ((int)m.WParam)
{
case DBT_DEVICEARRIVAL:
label1.Text = "USB裝置已插入";
break;
case DBT_DEVICEREMOVECOMPLETE:
label1.Text = "USB裝置已移除";s
break;
}
}
}
}
步驟 3: 執行和測試
執行您的應用程式。現在,每當USB裝置被插入或移除時,應用程式都會顯示一個通知使用者。
工作原理
此程式的核心在於監聽Windows的WM_DEVICECHANGE
訊息,該訊息由系統在裝置狀態變化時傳送。我們透過重寫窗體的WndProc
方法來處理這些訊息。當檢測到裝置插入(DBT_DEVICEARRIVAL
)或移除(DBT_DEVICEREMOVECOMPLETE
)時,程式會顯示相應的訊息。
注意事項
-
本示例未指定特定型別的裝置通知,因此它會對所有型別的裝置插入和移除事件作出響應。在實際應用中,您可能需要更詳細地指定
RegisterDeviceNotification
函式的NotificationFilter
引數,以便只接收特定型別的裝置通知,例如僅USB裝置。 -
使用
MessageBox
來顯示通知僅用於示例目的。在實際應用中,您可能需要採用更合適的方式來通知使用者或處理事件。
結論
透過本文介紹的方法,您可以在自己的Windows應用程式中實現對USB裝置插入和移除事件的監聽。這為開發需要與USB裝置互動的應用程式提供了基礎,從而可以在裝置連線或斷開時採取適當的行動。