庆祝老婆生日,发布《C#枚举硬件设备(升级版)》源码
先取设备类型:
- C# code
/// <summary> /// 设备类型 /// </summary> class DeviceClasses { public static Guid ClassesGuid; public const int MAX_SIZE_DEVICE_DESCRIPTION = 1000; public const int CR_SUCCESS = 0x00000000; public const int CR_NO_SUCH_VALUE = 0x00000025; public const int CR_INVALID_DATA = 0x0000001F; private const int DIGCF_PRESENT = 0x00000002; private const int DIOCR_INSTALLER = 0x00000001; private const int MAXIMUM_ALLOWED = 0x02000000; public const int DMI_MASK = 0x00000001; public const int DMI_BKCOLOR = 0x00000002; public const int DMI_USERECT = 0x00000004; [StructLayout(LayoutKind.Sequential)] class SP_DEVINFO_DATA { public int cbSize; public Guid ClassGuid; public int DevInst; public ulong Reserved; } [DllImport("cfgmgr32.dll")] private static extern UInt32 CM_Enumerate_Classes(UInt32 ClassIndex, ref Guid ClassGuid, UInt32 Params); [DllImport("setupapi.dll")] private static extern Boolean SetupDiClassNameFromGuidA(ref Guid ClassGuid, StringBuilder ClassName, UInt32 ClassNameSize, ref UInt32 RequiredSize); [DllImport("setupapi.dll")] private static extern IntPtr SetupDiGetClassDevsA(ref Guid ClassGuid, UInt32 Enumerator, IntPtr hwndParent, UInt32 Flags); [DllImport("setupapi.dll")] private static extern Boolean SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet); [DllImport("setupapi.dll")] private static extern IntPtr SetupDiOpenClassRegKeyExA(ref Guid ClassGuid, UInt32 samDesired, int Flags, IntPtr MachineName, UInt32 Reserved); [DllImport("setupapi.dll")] private static extern Boolean SetupDiEnumDeviceInfo(IntPtr DeviceInfoSet, UInt32 MemberIndex, SP_DEVINFO_DATA DeviceInfoData); [DllImport("advapi32.dll")] private static extern UInt32 RegQueryValueA(IntPtr KeyClass, UInt32 SubKey, StringBuilder ClassDescription, ref UInt32 sizeB); /// <summary> /// 设备类型图标信息 /// </summary> [StructLayout(LayoutKind.Sequential)] public class SP_CLASSIMAGELIST_DATA { public int cbSize; public ImageList ImageList; public ulong Reserved; } public struct RECT { long left; long top; long right; long bottom; } /// <summary> /// 载入图片 /// </summary> /// <param name="hInstance"></param> /// <param name="Reserved"></param> /// <returns></returns> [DllImport("user32.dll")] public static extern int LoadBitmapW(int hInstance, ulong Reserved); /// <summary> /// 获取图标 /// </summary> /// <param name="ClassImageListData"></param> /// <returns></returns> [DllImport("setupapi.dll")] public static extern Boolean SetupDiGetClassImageList(out SP_CLASSIMAGELIST_DATA ClassImageListData); [DllImport("setupapi.dll")] public static extern int SetupDiDrawMiniIcon(Graphics hdc, RECT rc, int MiniIconIndex, int Flags); [DllImport("setupapi.dll")] public static extern bool SetupDiGetClassBitmapIndex(Guid ClassGuid, out int MiniIconIndex); [DllImport("setupapi.dll")] public static extern int SetupDiLoadClassIcon(ref Guid classGuid, out IntPtr hIcon, out int index); /// <summary> /// 枚举设备类型 /// </summary> /// <param name="ClassIndex"></param> /// <param name="ClassName"></param> /// <param name="ClassDescription"></param> /// <param name="DevicePresent"></param> /// <returns></returns> public static int EnumerateClasses(UInt32 ClassIndex, StringBuilder ClassName, StringBuilder ClassDescription, ref bool DevicePresent) { Guid ClassGuid = Guid.Empty; IntPtr NewDeviceInfoSet; UInt32 result; SP_DEVINFO_DATA DeviceInfoData = new SP_DEVINFO_DATA(); bool resNam = false; UInt32 RequiredSize = 0; result = CM_Enumerate_Classes(ClassIndex, ref ClassGuid, 0); DevicePresent = false; SP_CLASSIMAGELIST_DATA imagelist = new SP_CLASSIMAGELIST_DATA(); if (result != CR_SUCCESS) { return (int)result; } resNam = SetupDiClassNameFromGuidA(ref ClassGuid, ClassName, RequiredSize, ref RequiredSize); if (RequiredSize > 0) { ClassName.Capacity = (int)RequiredSize; resNam = SetupDiClassNameFromGuidA(ref ClassGuid, ClassName, RequiredSize, ref RequiredSize); } NewDeviceInfoSet = SetupDiGetClassDevsA(ref ClassGuid, 0, IntPtr.Zero, DIGCF_PRESENT); if (NewDeviceInfoSet.ToInt32() == -1) { DevicePresent = false; return 0; } UInt32 numD = 0; DeviceInfoData.cbSize = 28; DeviceInfoData.DevInst = 0; DeviceInfoData.ClassGuid = System.Guid.Empty; DeviceInfoData.Reserved = 0; Boolean res1 = SetupDiEnumDeviceInfo( NewDeviceInfoSet, numD, DeviceInfoData); if (!res1) { DevicePresent = false; return 0; } SetupDiDestroyDeviceInfoList(NewDeviceInfoSet); IntPtr KeyClass = SetupDiOpenClassRegKeyExA( ref ClassGuid, MAXIMUM_ALLOWED, DIOCR_INSTALLER, IntPtr.Zero, 0); if (KeyClass.ToInt32() == -1) { DevicePresent = false; return 0; } UInt32 sizeB = MAX_SIZE_DEVICE_DESCRIPTION; ClassDescription.Capacity = MAX_SIZE_DEVICE_DESCRIPTION; UInt32 res = RegQueryValueA(KeyClass, 0, ClassDescription, ref sizeB); if (res != 0) ClassDescription = new StringBuilder(""); //No device description DevicePresent = true; ClassesGuid = DeviceInfoData.ClassGuid; return 0; } }
http://download.csdn.net/source/1871029
[解决办法]
jf:楼主强大 啊
[解决办法]
谢谢分享
[解决办法]
jf
[解决办法]
http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/68.gif
[解决办法]
接代码并顺便接分
[解决办法]
珍藏
[解决办法]
生日快乐
支持
[解决办法]
狠了 JF
[解决办法]
up!!
HP!!
[解决办法]
捧场!
【原创家庭记账簿1.1.1,简单实用,欢迎工薪阶层、家庭主妇下载使用
http://download.csdn.net/source/1849003】
[解决办法]
生日快乐!!!感谢分享!!!学习ing.....
[解决办法]
生日快乐..收藏.
[解决办法]
生日快乐
支持一下
[解决办法]
生日快乐
顺便jf
[解决办法]
生日快乐 幸福的一对
[解决办法]
生日快乐是必须的
代码很好,很强大
[解决办法]
祝福...
[解决办法]
送上祝福
接到分
学到(yóu yuē )
[解决办法]
超级好
[解决办法]
路过哈哈
[解决办法]
jf
xiexie
非常感谢
分分
[解决办法]
哇 恭喜 ! 都31楼了, 好象还来得不晚吧
[解决办法]
路过
[解决办法]
aaaaaaaaaaaaaaaaa
[解决办法]
UP
[解决办法]
才子佳人。
[解决办法]
老大这个很牛啊,谢谢老大
[解决办法]
楼主真是强,谢谢分享!学习了,顺祝楼主之lover生日快乐,祝你们永远幸福
[解决办法]
mark
[解决办法]
便拿分!
[解决办法]
每天回帖即可获得10分可用分!
[解决办法]
为了 可用分 努力回帖!
[解决办法]
生日快乐,迟来的祝福。代码收藏。
[解决办法]
[解决办法]
学习
[解决办法]
收了,也送去祝福!~
[解决办法]
楼主我把这个收藏了
[解决办法]
顶!!祝生日快乐!
[解决办法]
非常感谢
[解决办法]
谢谢哈。
[解决办法]
谢谢分享~~
[解决办法]
祝福 祝福 楼主好幸福的人啊
[解决办法]
接代码并顺便接分
[解决办法]
很好,多谢了
[解决办法]
生日快乐。。。。
[解决办法]
学习了!
[解决办法]
看看
[解决办法]
收藏了,学习
[解决办法]
不错
[解决办法]
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
[解决办法]
没收了。。。。。。嘿嘿
[解决办法]
祝嫂子生日快乐
[解决办法]
祝贺,接分
[解决办法]
生日快乐
[解决办法]
jf
[解决办法]
up,谢谢蟑螂
[解决办法]
来晚了,UP
[解决办法]
不错
[解决办法]
太强了!
[解决办法]
很好很强大。
[解决办法]
哇( ⊙o⊙ )哇
[解决办法]
这个好,学习了
[解决办法]
UP
[解决办法]
不错哦,谢谢分享~
[解决办法]
收藏!
------解决方案--------------------
收藏
[解决办法]
很好很强大
[解决办法]
Ding 很强大
[解决办法]
学习接分
生日快乐
[解决办法]
路过哈哈
[解决办法]
好东西啊
[解决办法]
楼主好人啊,生日快乐
[解决办法]
祝老婆生日快乐!
[解决办法]
[解决办法]
羡慕啊
[解决办法]
楼主很牛呀,好好学习啦!
谢谢,嗯的!
[解决办法]
祝lz de lp 生日快!
[解决办法]
这生日好,呵呵,快乐!
支持一下
[解决办法]
up , happy birthday!
[解决办法]
顶
快了
[解决办法]
祝lz老婆生日快乐
[解决办法]
[解决办法]
z祝福
[解决办法]
[解决办法]
快乐!
[解决办法]
MARK
[解决办法]
生日快了,顺便接分学习
[解决办法]
生日快了,顺便接分。。。。。
[解决办法]
mark