VC列举当前电脑存在的设备

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
BOOL EnumAllDevice(vector<pair<SP_DEVINFO_DATA, string>> &vDeviceName)
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
//TCHAR tempDevice[MAX_PATH] = {0};


printf("Displaying the Installed Devices\n\n");


// 得到所有设备 HDEVINFO 
hDevInfo = SetupDiGetClassDevs(NULL,
0, // 无类型
0, // 无回调函数
DIGCF_PRESENT | DIGCF_ALLCLASSES );
if (hDevInfo == INVALID_HANDLE_VALUE)
{
return FALSE;
}
// 循环列举
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
&DeviceInfoData);i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;


// 获取详细信息
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC, //SPDRP_ENUMERATOR_NAME, //SPDRP_DEVTYPE, //SPDRP_DRIVER, 
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// 内存不足
if (buffer) HeapFree(GetProcessHeap(), 0, buffer);
buffer = (LPTSTR)HeapAlloc(GetProcessHeap(), 0,  buffersize);
}
else
break;
}

//memcpy(tempDevice, buffer, buffersize);
string devName = GetStr(buffer);
vDeviceName.push_back(make_pair(DeviceInfoData, devName));
if (buffer) HeapFree(GetProcessHeap(), 0, buffer);
}


if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
return FALSE;
}
//  释放
SetupDiDestroyDeviceInfoList(hDevInfo);
return TRUE;

}

从LPTSTR转换到string的代码如下:

string GetStr(LPTSTR value)
{
string str("");


while(*value)
{
str += *value;
value++;
}


return str;
}

打印当前电脑所有设备的GUID和名称:

vector<pair<SP_DEVINFO_DATA, string>>::iterator iter = vDeviceName.begin();
for (iter = vDeviceName.begin(); iter != vDeviceName.end(); ++iter)
{
//cout << (*iter).first << endl;
printf("GUID:{%.8X-%.4X-%.4X--%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X} "
"Device: %s\n", (*iter).first.ClassGuid.Data1,
(*iter).first.ClassGuid.Data2,
(*iter).first.ClassGuid.Data3,
(*iter).first.ClassGuid.Data4[0],
(*iter).first.ClassGuid.Data4[1],
(*iter).first.ClassGuid.Data4[2],
(*iter).first.ClassGuid.Data4[3],
(*iter).first.ClassGuid.Data4[4],
(*iter).first.ClassGuid.Data4[5],
(*iter).first.ClassGuid.Data4[6],
(*iter).first.ClassGuid.Data4[7],(*iter).second.c_str());
}

VC 获取屏幕大小第二篇 物理大小GetDeviceCaps 上 阅读详情

相关推荐

USB 信息查找

查找连接到电脑上的USB设备信息,包括U盘,鼠标,键盘。vc6.0调试通过。 SetupDiGetDeviceRegistryProperty(hdev,&devinfo,SPDRP_LOCATION_INFORMATION,&DataType,Buffer,sizeof(Buffer),&BufferSize);

C++ 实现Windows系统设备枚举

1.枚举系统设备 HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD dwDevID; // 得到所有设备 HDEVINFO  hDevInfo = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES);//根据此处参数不同可分类枚举设备,这

叶阳的博客 6498

枚举系统中所有硬件设备

虽然简单,但是实用 HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i,j; int ret=0; hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID;_DEVCLASS_MOUSE, 0, 0,DIGCF_PRESENT);//DIGCF_PROFILE);// /*   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){ // Insert error handling here. // return ; } // Enumerate through all devices in Set. DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData;);i++) { DWORD DataT; //LPTSTR buffer = NULL; 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); //buffer = (PSP_INF_INFORMATION)LocalAlloc(LPTR,buffersize); // <!--[if !supportEmptyParas]--><!--[endif]--> } else { // Insert error handling here. break; } } if (buffer != NULL && i == 0) { // temp.Format(""); // str += temp; } // temp.Format("%s",buffer); // str += temp; if (buffer) LocalFree(buffer); } if (i != 0) { // temp.Format(""); // str += temp; } if ( GetLastError()!=NO_ERROR && GetLastError()!=ERROR_NO_MORE_ITEMS ) { return ; } // <!--[if !supportEmptyParas]--><!--[endif]--> // Cleanup SetupDiDestroyDeviceInfoList(hDevInfo);

获取设备管理器的信息 - VC

有些时候需要先获取设备管理器里面的硬件信息,才能执行对应的操作,简单的鼓捣了一下,贴出来共享。 具体有两个方法,大致来说差不多,流程一样 ,懒得整理了,直接贴出来原始体。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

flyingleo1981的专栏 6747

windows SetupAPI 介绍和使用

from:http://blog.csdn.net/zhulinu/article/details/8682856 目录(?)[+] 在NT的基础上,MS在NT4.0后的操作系统里都提供了很多以SetupDiXXXXX开头的函数,就是大家经常所说的 SetupAPI. 需要包含头文件setupapi.h。setupapi.lib。 1,首

xringm的博客 3213

枚举pc硬件设备并获取相关信息

#include &lt;windows.h&gt; #include &lt;setupapi.h&gt; #include &lt;devguid.h&gt; #pragma comment(lib, "setupapi") void GetDeviceInfo() { //得到设备信息集 HDEVINFO hDevInfo = SetupDiGetClassDevs( (LP...

宏的博客 1432

VC实现发送和接收短信(操作AT指令)

前些日子感觉得练习一下VC了,所以就有想,平时发短信那么累,手机键盘又不好用,而我又有数据线,为什么不可以用电脑直接发送短信呢?想法一出来,就开始找资料开始行动吧! 由于程序涉及的方面很多,因此只讲关键的主要的部分。 首先,得了解手机和电脑之间是通过什么通讯的,我的手机是有红外接口,电脑上接一个红外适配器,就可以与手机连接了,而Windows是把红外设备当作一个串口来...

FLY_THINK2012的博客 482

VC实现发送和接受短信

    前些日子感觉得练习一下VC了,所以就有想,平时发短信那么累,手机键盘又不好用,而我又有数据线,为什么不可以用电脑直接发送短信呢?想法一出来,就开始找资料开始行动吧!    由于程序涉及的方面很多,因此只讲关键的主要的部分。    首先,得了解手机和电脑之间是通过什么通讯的,我的手机是有红外接口,电脑上接一个红外适配器,就可以与手机连接了,而Windows是把红外设备当作一个串口来看待的,所

可不可以不糊涂 4053

删除电脑属性制造商_电脑蓝屏怎么处理,最全的蓝屏处理方法

蓝屏估计是大家平时使用电脑过程中最为常见的电脑故障之一了,我们知道蓝屏会有一堆英文、这些英文就是解释蓝屏原因的,今天小编就来跟大家说说常见蓝屏的代码和如何解决这个问题。电脑突然蓝屏?常见蓝屏代码大全,以及解决办法!通常的原因:驱动程序使用了不正确的内存地址。解决方法:重新启动计算机,连续按F8键。进入WINDOWS高级选项菜单,选择"最后一次正确的配置",然后按回车键。通常的原因:内存错误(数据不...

weixin_39840111的博客 417

3步免费修复GTA经典三部曲:如何让III、VC、SA在现代电脑上告别崩溃与卡顿

一台性能过剩的新电脑,反而跑不动20年前的老游戏——这不是你的设备出了问题,而是当年的游戏引擎与今天的系统之间,隔着一道看不见的兼容性鸿沟。SilentPatch 正是为 GTA III、Vice City 和 San Andreas 打造的免费开源修复方案,它用上百个精准的技术补丁填平这道鸿沟,让这三款经典作品在现代电脑上流畅运行,且不改动任何游戏玩法。 ## 一、先讲一个反常识的现象 你有

gitblog_00605的博客 1102

VC API常用函数简单例子大全

VC API常用函数简单例子大全 http://hi.baidu.com/tag/vc%20api%E5%87%BD%E6%95%B0/feeds   系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindWindow根据窗口类

jiangxinyu的专栏 5377

VC_6中配置OpenGL开发环境

第一步:下载OpenGL库 Windows环境下的GLUT下载地址:(大小约为150k) http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip 其实,也不是必须从这里下载,在你下载一些例子的时候,一般都会打包呆上OpenGL库的。 这里顺便介绍一下OpenGL吧: Ope...

weixin_34268843的博客 160

电脑自带dll修复在哪里,dll修复工具一键修复dll丢失问题

xinput1_3.dll文件是一个Windows操作系统中的动态链接库(DLL)文件,它是微软DirectX软件开发包的一部分,主要用于支持游戏控制器和其他输入设备的交互。当运行那些依赖于DirectX的游戏或应用程序时,如果系统缺少xinput1_3.dll文件,可能会导致游戏无法识别和正常使用游戏控制器,或者在启动程序时出现错误提示。游戏手柄输入处理:xinput1_3.dll是Microsoft DirectX的一部分,主要用于处理游戏控制器(如Xbox 360手柄)的输入数据。

sheng12345678rui的博客 1936
上一篇: 创建和访问环境变量
下一篇: 根据GUID类别获取设备信息
枫★曦
博客等级 码龄19年 251粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值