在我的应用程序中,我使用USB设备进行某些操作,有时会发生USB断开并再次连接的情况,此后,我无法从应用程序中使用该设备,并且要继续使用它,我需要重新启动应用程序, 如何在不重新启动应用程序的情况下使用它?
在获得一些帮助之后,当我通过添加代码插入/拔出设备时处理了该事件”
['London', 'London']
['London', 'London', 'London']
['London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London']
['London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London', 'London']
输出为:
{msg = 0x219(WM_DEVICECHANGE)hwnd = 0x90242 wparam = 0x7 lparam = 0x0 结果= 0x0}
问题是我需要更多信息以表明它是正确的设备
试图将SharpUSBLib dll用于该目的但没有成功,我可以用于该目的吗?
谢谢
答案 0 :(得分:0)
一种解决方案选项
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
public enum WM : uint
{
/// <summary>
/// Notifies an application of a change to the hardware configuration of a device or the computer.
/// </summary>
DEVICECHANGE = 0x0219,
}
protected override void WndProc(ref Message m)
{
switch ((WM)m.Msg)
{
case WM.DEVICECHANGE:
var usbDevices = GetUSBDevices();
txtInfo.Text = string.Empty;
foreach (var usbDevice in usbDevices)
{
if (usbDevice.Name.Contains("Name of my usb device"))
{
// Code ..
}
}
break;
}
base.WndProc(ref m);
}
static List<USBDeviceInfo> GetUSBDevices()
{
List<USBDeviceInfo> devices = new List<USBDeviceInfo>();
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_PnPEntity where DeviceID Like ""USB%"""))
collection = searcher.Get();
foreach (var device in collection)
{
devices.Add(new USBDeviceInfo(
(string)device.GetPropertyValue("Name"),
(string)device.GetPropertyValue("DeviceID"),
(string)device.GetPropertyValue("PNPDeviceID"),
(string)device.GetPropertyValue("Description")
));
}
collection.Dispose();
return devices;
}
}
class USBDeviceInfo
{
public string Name { get; private set; }
public string DeviceID { get; private set; }
public string PnpDeviceID { get; private set; }
public string Description { get; private set; }
public USBDeviceInfo(string name, string deviceID, string pnpDeviceID, string description)
{
this.Name = name;
this.DeviceID = deviceID;
this.PnpDeviceID = pnpDeviceID;
this.Description = description;
}
}