java 监控usb端口插拔_如何监控某种类型的USB设备的插拔?

用System.Managment class 试试

下面是我在网上找到的代码

出处

http://www.eggheadcafe.com/software/aspnet/31850441/c-usb-pluginremoval-h.aspx

代码如下:

// This code demonstrates how to monitor the UsbControllerDevice for

// the arrival of creation/operation events

using System;

using System.ComponentModel;

using System.Runtime.InteropServices;

using System.Management;

class WMIEvent {

public static void Main() {

WMIEvent we = new WMIEvent();

ManagementEventWatcher w= null;

WqlEventQuery q;

ManagementOperationObserver observer = new ManagementOperationObserver();

// Bind to local machine

ManagementScope scope = new ManagementScope("root\\CIMV2");

scope.Options.EnablePrivileges = true; //set required privilege

try {

q = new WqlEventQuery();

q.EventClassName = "__InstanceOperationEvent";

q.WithinInterval = new TimeSpan(0,0,3);

q.Condition = @"TargetInstance ISA 'Win32_DiskDrive' ";

w = new ManagementEventWatcher(scope, q);

w.EventArrived += new EventArrivedEventHandler(we.DiskEventArrived);

w.Start();

Console.ReadLine(); // block main thread for test purposes

}

catch(Exception e) {

Console.WriteLine(e.Message);

}

finally {

w.Stop();

}

}

public void DiskEventArrived(object sender, EventArrivedEventArgs e) {

//Get the Event object and display its properties (all)

foreach(PropertyData pd in e.NewEvent.Properties) {

ManagementBaseObject mbo = null;

if(( mbo = pd.Value as ManagementBaseObject) != null) {

Console.WriteLine("--------------Properties------------------");

foreach(PropertyData prop in mbo.Properties)

Console.WriteLine("{0} - {1}", prop.Name, prop.Value);

}

}

}

}

下面几篇文章也提供给你参考

MSDN 中介绍如何注册驱动的通知消息

http://msdn.microsoft.com/en-us/library/aa363432.aspx

Detecting USB Stick Plug in and Plug out (USB Harddrive)

http://bytes.com/groups/net-c/234006-detecting-usb-stick-plug-plug-out-usb-harddrive

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Windows上监控USB设备插拔动作,可以使用Windows API函数来实现。以下是一个使用C语言编写的示例代码: ```c #include <Windows.h> #include <Dbt.h> #include <stdio.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_DEVICECHANGE: { PDEV_BROADCAST_HDR pBroadcastHdr = (PDEV_BROADCAST_HDR)lParam; if (pBroadcastHdr != NULL) { switch (wParam) { case DBT_DEVICEARRIVAL: { PDEV_BROADCAST_DEVICEINTERFACE pBroadcastDevInterface = (PDEV_BROADCAST_DEVICEINTERFACE)pBroadcastHdr; if (pBroadcastDevInterface->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { printf("USB device inserted\n"); // 在这里处理USB设备插入后的操作 } break; } case DBT_DEVICEREMOVECOMPLETE: { PDEV_BROADCAST_DEVICEINTERFACE pBroadcastDevInterface = (PDEV_BROADCAST_DEVICEINTERFACE)pBroadcastHdr; if (pBroadcastDevInterface->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { printf("USB device removed\n"); // 在这里处理USB设备拨出后的操作 } break; } } } break; } default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } int main() { WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; wc.hInstance = GetModuleHandle(NULL); wc.lpszClassName = "USBDeviceMonitor"; if (!RegisterClass(&wc)) { printf("Failed to register window class\n"); return 1; } HWND hWnd = CreateWindowEx(0, wc.lpszClassName, "", 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL); if (hWnd == NULL) { printf("Failed to create window\n"); return 1; } DEV_BROADCAST_DEVICEINTERFACE notificationFilter = {0}; notificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); notificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; notificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB; HDEVNOTIFY hDevNotify = RegisterDeviceNotification(hWnd, &notificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); if (hDevNotify == NULL) { printf("Failed to register device notification\n"); return 1; } MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } UnregisterDeviceNotification(hDevNotify); DestroyWindow(hWnd); return 0; } ``` 在上面的代码中,我们创建了一个窗口,并在窗口的回调函数`WndProc`中处理`WM_DEVICECHANGE`消息,该消息会在设备插拔时触发。通过检查`wParam`参数和设备类型,我们可以确定是设备插入还是拨出,并在相应的分支中执行相应的操作。 请注意,该示例代码是一个简化的示例,只演示了如何监控USB设备插拔动作。在实际应用中,您可能需要根据需要进行更多的处理,例如打开和关闭设备、读取设备信息等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值