博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
枚举系统设备
阅读量:6760 次
发布时间:2019-06-26

本文共 3096 字,大约阅读时间需要 10 分钟。

方法一:

#include 
#include
#include
#include
#include
#include
#pragma comment(lib, "setupapi.lib")#define BUFSIZE 1024#define SM_SERVERR 289int main(){ HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_PORTS, 0, 0,DIGCF_PRESENT); /* GUID_DEVCLASS_FDC软盘控制器 GUID_DEVCLASS_DISPLAY显示卡 GUID_DEVCLASS_CDROM光驱 GUID_DEVCLASS_KEYBOARD键盘 GUID_DEVCLASS_COMPUTER计算机 GUID_DEVCLASS_SYSTEM系统 GUID_DEVCLASS_DISKDRIVE磁盘驱动器 GUID_DEVCLASS_MEDIA声音、视频和游戏控制器 GUID_DEVCLASS_MODEMMODEM GUID_DEVCLASS_MOUSE鼠标和其他指针设备 GUID_DEVCLASS_NET网络设备器 GUID_DEVCLASS_USB通用串行总线控制器 GUID_DEVCLASS_FLOPPYDISK软盘驱动器 GUID_DEVCLASS_UNKNOWN未知设备 GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器 GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器 GUID_DEVCLASS_PORTS端口(COM 和 LPT) GUID_DEVCLASS_MONITOR监视器 */ if (hDevInfo == INVALID_HANDLE_VALUE) { DWORD dwError = GetLastError(); // Insert error handling here. return 1; } // Enumerate through all devices in Set. DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) { DWORD DataT; char buffer[2048]; DWORD buffersize = sizeof(buffer); while (!SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buffer, buffersize, &buffersize)) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { // Change the buffer size. //if (buffer) LocalFree(buffer); } else { // Insert error handling here. break; } } if (buffer != NULL) { printf("%s\r\n", buffer); } if (buffer) { LocalFree(buffer); } } if ( GetLastError() != NO_ERROR && GetLastError() != ERROR_NO_MORE_ITEMS ) { return 1; } // Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return 0;}

方法二:

/* 函数名 : GetSerialPortsReg*  说  明 : 通过注册表枚举系统串口数量,并列出所有串口的系统名**  参  数 : pListStr, 串口名称列表*  返回值 : int, 系统串口个数*/int GetSerialPortsReg(char (*pListStr)[80]){    HKEY hKey;    LPCTSTR data_Set="HARDWARE\\DEVICEMAP\\SERIALCOMM\\";    long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));    if(ret0 != ERROR_SUCCESS)    {        return -1;    }    int i = 0;    CHAR Name[25] = {
0}; UCHAR szPortName[80] = {
0}; LONG Status; DWORD dwIndex = 0; DWORD dwName; DWORD dwSizeofPortName; DWORD Type; dwName = sizeof(Name); dwSizeofPortName = sizeof(szPortName); do { memset(Name,0,25); memset(szPortName,0,sizeof(szPortName)); dwName = VALUENAMEMAX; dwSizeofPortName = VALUENAMEMAX; Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName); if(strcmp(Name ,"Winachsf0") == 0 )//过滤掉识别出来的蓝牙设备 continue; if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA)) { if (pListStr != NULL) { memcpy(*(pListStr + i), (LPCSTR)szPortName, 80); } i++; } } while((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA)); RegCloseKey(hKey); return i;}

 

转载地址:http://xkbeo.baihongyu.com/

你可能感兴趣的文章
Java
查看>>
HTTP Response Spliting 防范策略研究
查看>>
Libgdx window add alpha action change the background actor alpha
查看>>
(转)过滤器原理
查看>>
JavaScript 触发click事件 兼容FireFox,IE 和 Chrome
查看>>
【英语称谓】软件行业外企称谓简称
查看>>
实现打印级别且带图片的Excel 方案
查看>>
自动化CI构建工具
查看>>
批处理中的变量
查看>>
grub2手动引导ubuntu
查看>>
ORACLE SEQUENCE 介绍
查看>>
发个招聘信息
查看>>
JSEclipse—Eclipse上的JavaScript开发工具
查看>>
【NOIP模拟题】小象涂色(概率+期望+递推)
查看>>
Tomcat全攻略
查看>>
[CB2]start up
查看>>
转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
查看>>
CodeCounter代码统计
查看>>
.Net垃圾收集机制—了解算法与代龄
查看>>
怎样实现Web控件文本框Reset的功能
查看>>