如何在c中获取windows中的设备属性?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在c中获取windows中的设备属性?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2806字,纯文字阅读大概需要5分钟。
内容图文
在Windows中,如果我打开设备管理器 – >右键单击设备 – >属性 – >细节,我得到{Property,Value}对.我想在Visual Studio的C代码中访问它们.我怎么得到它?
谢谢,
解决方法:
尝试SetupDi_功能,例如here.
HDEVINFO WinDeviceHelper::getDevInfoForClass(QString devClassName,DWORD& dwCount)
{
//DWORD dwGuids = 0;
SetupDiClassGuidsFromNameW( qPrintableW(devClassName), 0, 0, &dwCount );
//emit sSearchStarted(dwGuids);
if(dwCount)
{
GUID* pGuids = new GUID[dwCount];
BOOL success = SetupDiClassGuidsFromNameW( qPrintableW(devClassName), pGuids, dwCount, &dwCount );
HDEVINFO hDevInfoSet = SetupDiGetClassDevsW( pGuids, NULL, NULL, DIGCF_PRESENT);
delete [] pGuids;
return hDevInfoSet;
}
else
{
return NULL;
}
}
bool WinDeviceHelper::getDeviceRegistryString(HDEVINFO hDevInfoSet,SP_DEVINFO_DATA &devInfo,DWORD propertyType,QString& propValue)
{
DWORD dwType = 0;
DWORD requiredSize=0;
propValue="";
BOOL result=SetupDiGetDeviceRegistryPropertyW( hDevInfoSet, &devInfo, propertyType, &dwType, NULL, NULL, &requiredSize);
if ((result==ERROR_INVALID_DATA) || ((dwType!=REG_MULTI_SZ)&&(dwType!=REG_SZ)) || (requiredSize==0) )
{
return false;
//throw std::exception(__FILE__":"__LINE__" "__FUNCDNAME__": Error reading registry info");
}
size_t strSize=requiredSize/sizeof(wchar_t)+1;
wchar_t* requestedData = new wchar_t[strSize];// буфер
result=SetupDiGetDeviceRegistryPropertyW( hDevInfoSet, &devInfo, propertyType, &dwType,reinterpret_cast<PBYTE>(requestedData), requiredSize, &requiredSize);
if(result==TRUE )
{
propValue=QString::fromWCharArray(requestedData,wcslen(requestedData));
}
else
{
Logger::logError(QString("WinDeviceHelper::getDeviceRegistryString: SetupDiGetDeviceRegistryPropertyW failed with error %1").arg(GetLastError()));
}
delete[]requestedData;
return (result==TRUE );
}
bool WinDeviceHelper::getVendorAndDeviceIds(HDEVINFO hDevInfoSet,SP_DEVINFO_DATA &devInfo,QString& vendorId, QString& deviceId)
{
QString dataStr;
if(getDeviceRegistryString(hDevInfoSet,devInfo,SPDRP_HARDWAREID,dataStr))
{
dataStr=dataStr.toUpper();
QRegExp vidpid("(VID_)[0-9A-F]{4}(&PID_)[0-9A-F]{4}");
int pos=dataStr.indexOf(vidpid);
if(pos>=0)
{
vendorId=dataStr.mid(pos+4,4);
pos+=8;
pos+=5;
deviceId=dataStr.mid(pos,4);
return true;
}
}
return false;
}
一块用法
DWORD dwGuids = 0;
HDEVINFO hDevInfoSet = getDevInfoForClass(drvClass,dwGuids);
//Logger::logTrace(QString("WinDeviceHelper::searchForPort() found %1 port drivers for type %2").arg(dwGuids).arg(drvClass));
if(dwGuids)
{
BOOL bMoreItems = TRUE;
int nIndex = 0;
SP_DEVINFO_DATA devInfo;
devInfo.cbSize = sizeof( SP_DEVINFO_DATA );
while( SetupDiEnumDeviceInfo( hDevInfoSet, nIndex, &devInfo ) && ( nIndex != -1 ) )
{
//Logger::logTrace(QString("WinDeviceHelper::searchForPort() enumerating ports. current index: %1").arg(nIndex));
QString iVid,iPid;
QString fName;
if( getVendorAndDeviceIds(hDevInfoSet,devInfo,iVid,iPid)
enter code here
}
}
内容总结
以上是互联网集市为您收集整理的如何在c中获取windows中的设备属性?全部内容,希望文章能够帮你解决如何在c中获取windows中的设备属性?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。