public static bool GetDevicesOfCat(Guid cat, out ArrayList devs) { devs = null; int hr; object comObj = null; ICreateDevEnum enumDev = null; IEnumMoniker enumMon = null; IMoniker[] mon = new IMoniker[1]; try { Type srvType = Type.GetTypeFromCLSID(Clsid.SystemDeviceEnum); if (srvType == null) throw new NotImplementedException("System Device Enumerator"); comObj = Activator.CreateInstance(srvType); enumDev = (ICreateDevEnum)comObj; hr = enumDev.CreateClassEnumerator(ref cat, out enumMon, 0); if (hr != 0) throw new NotSupportedException("No devices of the category"); int count = 0; IntPtr f = IntPtr.Zero; do { hr = enumMon.Next(1, mon, f); if ((hr != 0) || (mon[0] == null)) break; DsDevice dev = new DsDevice(); dev.Name = GetFriendlyName(mon[0]); if (devs == null) devs = new ArrayList(); dev.Mon = mon[0]; mon[0] = null; devs.Add(dev); dev = null; count++; } while (true); return count > 0; } catch (Exception) { if (devs != null) { foreach (DsDevice d in devs) d.Dispose(); devs = null; } return false; } finally { enumDev = null; if (mon[0] != null) Marshal.ReleaseComObject(mon[0]); mon[0] = null; if (enumMon != null) Marshal.ReleaseComObject(enumMon); enumMon = null; if (comObj != null) Marshal.ReleaseComObject(comObj); comObj = null; } }
private void okButton_Click(object sender, EventArgs e) { if (deviceListVw.SelectedItems.Count != 1) return; ListViewItem selitem = deviceListVw.SelectedItems[0]; SelectedDevice = selitem.Tag as DsDevice; Close(); }
public static bool GetDevicesOfCat(Guid cat, out ArrayList devs) { devs = null; int hr; object comObj = null; ICreateDevEnum enumDev = null; IEnumMoniker enumMon = null; IMoniker[] mon = new IMoniker[1]; try { Type srvType = Type.GetTypeFromCLSID(Clsid.SystemDeviceEnum); if (srvType == null) { throw new NotImplementedException("System Device Enumerator"); } comObj = Activator.CreateInstance(srvType); enumDev = (ICreateDevEnum)comObj; hr = enumDev.CreateClassEnumerator(ref cat, out enumMon, 0); if (hr != 0) { throw new NotSupportedException("No devices of the category"); } int count = 0; IntPtr f = IntPtr.Zero; do { hr = enumMon.Next(1, mon, f); if ((hr != 0) || (mon[0] == null)) { break; } DsDevice dev = new DsDevice(); dev.Name = GetFriendlyName(mon[0]); if (devs == null) { devs = new ArrayList(); } dev.Mon = mon[0]; mon[0] = null; devs.Add(dev); dev = null; count++; }while (true); return(count > 0); } catch (Exception) { if (devs != null) { foreach (DsDevice d in devs) { d.Dispose(); } devs = null; } return(false); } finally { enumDev = null; if (mon[0] != null) { Marshal.ReleaseComObject(mon[0]); } mon[0] = null; if (enumMon != null) { Marshal.ReleaseComObject(enumMon); } enumMon = null; if (comObj != null) { Marshal.ReleaseComObject(comObj); } comObj = null; } }