Tih*_*iho 7 c# usb wmi wmi-query
我需要在放置/移除USB时获得唯一的USB ID(不是卷序列号).但在所有情况下,"PNPDeviceID"始终为空.我使用的代码是:
static void Main(string[] args)
{
const string QUERY = @"select * from __InstanceOperationEvent within 1 where TargetInstance isa 'Win32_LogicalDisk' and (TargetInstance.DriveType=2)";
Program p = new Program();
ManagementEventWatcher w = new ManagementEventWatcher(new WqlEventQuery(QUERY));
w.EventArrived += new EventArrivedEventHandler(p.OnWMIEvent);
w.Start();
Console.ReadKey();
w.Stop();
}
public void OnWMIEvent(object sender, EventArrivedEventArgs e)
{
PropertyData p = e.NewEvent.Properties["TargetInstance"];
if (p != null)
{
ManagementBaseObject mbo = p.Value as ManagementBaseObject;
PropertyData deviceid = mbo.Properties["DeviceID"];
PropertyData drivetype = mbo.Properties["DriveType"];
PropertyData driveSerial = mbo.Properties["VolumeSerialNumber"];
PropertyData driveGUID = mbo.Properties["PNPDeviceID"];
Console.WriteLine("{0}-{1}", "DeviceID",deviceid.Value);
Console.WriteLine("{0}-{1}", "DriveType",drivetype.Value);
Console.WriteLine("{0}-{1}", "DriveSerial", driveSerial.Value);
Console.WriteLine("{0}-{1}", "driveGUID", driveGUID.Value);
Console.WriteLine();
}
}
Run Code Online (Sandbox Code Playgroud)
来源是:这个
我可以使用以下代码获得UNIQUE USB ID:
ManagementObjectSearcher theSearcher =
new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
foreach(ManagementObject currentObject in theSearcher.Get())
{
Console.WriteLine("{0}-{1}", "PNPDeviceID", currentObject.Properties["PNPDeviceID"].Value);
}
Run Code Online (Sandbox Code Playgroud)
那么请你告诉我如何在我放/取USB棒时将它们组合起来接收PNPDeviceId(USB GUID)
如果直接查询该类Win32_LogicalDisk并且没有获取该PNPDeviceID属性的值,则在 wmi 事件内部使用此类时也不会获取值。相反,您可以将Win32_DiskDrive类与__InstanceOperationEvent内部事件一起使用。
Select * From __InstanceOperationEvent Within 1 Where TargetInstance ISA 'Win32_DiskDrive' and TargetInstance.InterfaceType='USB'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4709 次 |
| 最近记录: |