龙空技术网

windows上利用C++语言查询设备 (windows,vs2010)

不凡的开笑 121

前言:

而今朋友们对“如何使用vs2010”大体比较注重,你们都需要分析一些“如何使用vs2010”的相关内容。那么小编也在网络上收集了一些关于“如何使用vs2010””的相关资讯,希望同学们能喜欢,我们一起来了解一下吧!

代码功能将windows设备遍历一次,然后将结果直接存放到map容器中,需要清楚其中一个设备的个数,直接通过map可以查询

#include <Windows.h>

#include <setupapi.h>

#include <string>

#include <vector>

#include<map>

#include<stdio.h>

#pragma comment(lib, "setupapi.lib")

using namespace std;

class QueryCard{

public:

map<string,int>Card;

map<string,int>::iterator it;

HDEVINFO hDevInfo;

SP_DEVINFO_DATA DeviceInfoData;

DWORD i;

void QueryCardCount();

};

void QueryCard::QueryCardCount(){

hDevInfo = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES);

if (hDevInfo == INVALID_HANDLE_VALUE)

return ;

DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)

{

char szDescBuf[MAX_PATH] = { 0 };

if (!SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)szDescBuf, MAX_PATH - 1, NULL))

continue;

string str=szDescBuf;

it = Card.find(str);

if(it == Card.end())

Card.insert(make_pair(str, 1));

else

{

Card[str]++;

}

}

SetupDiDestroyDeviceInfoList(hDevInfo);

}

int main(){

QueryCard QueryCardTest;

QueryCardTest.QueryCardCount();

int Drive=QueryCardTest.Card["磁盘驱动器"];

printf("DRIVE:%d\n",Drive);

return 1;

}

代码运行图

标签: #如何使用vs2010