windows下WMI使用C++查询用户硬件信息
最近需要做下用户信息统计,发现WMI真是个好东西,同时觉得COM这东西,还真不能少>_<!!
下面是源码:
/********************************************************************created: 2014/02/18author: baeskypurpose: Gater user infomation
*********************************************************************/
#include <comdef.h>
#include <Wbemidl.h># pragma comment(lib, "wbemuuid.lib")struct UserInfo
{/** your spec*/
};/** video card and OS */
bool GetUserInfo(UserInfo& Info)
{HRESULT hres;hres = CoInitialize( NULL );if (FAILED(hres)){return false; }hres = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL );if (FAILED(hres)){CoUninitialize();return false; }IWbemLocator *pLoc = NULL;hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);if (FAILED(hres)){CoUninitialize();return false; }IWbemServices *pSvc = NULL;hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc );if (FAILED(hres)){pLoc->Release(); CoUninitialize();return false; }hres = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE );if (FAILED(hres)){pSvc->Release();pLoc->Release(); CoUninitialize();return false; }IEnumWbemClassObject* pEnumerator = NULL;hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_OperatingSystem"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,&pEnumerator);if (FAILED(hres)){pSvc->Release();pLoc->Release();CoUninitialize();return false; }IWbemClassObject *pclsObj;ULONG uReturn = 0;while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);if(0 == uReturn){break;}VARIANT vtProp;hr = pclsObj->Get(L"Caption", 0, &vtProp, 0, 0); //os//vtProp.bstrVal is what you need.//VariantClear(&vtProp);//hr = pclsObj->Get(L"CSDVersion", 0, &vtProp, 0, 0); // example "sp3"//VariantClear(&vtProp);//hr = pclsObj->Get(L"OSArchitecture", 0, &vtProp, 0, 0); // example x64//VariantClear(&vtProp);pclsObj->Release();}pEnumerator->Release();pEnumerator=NULL;hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_VideoController"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,&pEnumerator);if (FAILED(hres)){pSvc->Release();pLoc->Release();CoUninitialize();return false; }while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);if(0 == uReturn){break;}VARIANT vtProp;hr = pclsObj->Get(L"Caption", 0, &vtProp, 0, 0); //video desc/** .,,,,,,,,,,,,,,,,,,,,,,your logic*/VariantClear(&vtProp);pclsObj->Release();}pEnumerator->Release();pEnumerator=NULL;hres = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("SELECT * FROM Win32_Processor"),WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL,&pEnumerator);if (FAILED(hres)){pSvc->Release();pLoc->Release();CoUninitialize();return false; }while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);if(0 == uReturn){break;}VARIANT vtProp;hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); //video desc/** .,,,,,,,,,,,,,,,,,,,,,,your logic*/VariantClear(&vtProp);pclsObj->Release();}pSvc->Release();pLoc->Release();pEnumerator->Release();CoUninitialize();return true;
}
转载于:https://www.cnblogs.com/Baesky/p/WMI_CPP.html
windows下WMI使用C++查询用户硬件信息相关推荐
- Linux下使用fstatfs/statfs查询系统相关信息
Linux下使用fstatfs/statfs查询系统相关信息 1. 功能 #include < sys/statfs.h > int statfs(const char *path, ...
- 计算机查询硬盘信息,查询电脑硬件信息的方法
电脑硬件,包括电脑中所有物理的零件,以此来区分它所包括或执行的数据和为硬件提供指令以完成任务的软件. 电脑硬件主要包含:机箱,主板,总线,电源,硬盘,存储控制器,界面卡,可携储存装置,内置存储器,输入 ...
- Windows下MongoDb服务安装及用户权限创建
2019独角兽企业重金招聘Python工程师标准>>> 1.为什么我要写这个blog?虽然网上的教程满天飞,但都是按照正常流程来写,我写的这个文档包含了我安装服务是遇到的各种问题及处 ...
- Windows下开启Mysql慢查询详解
//show variables like '%quer%';查询是否开启了慢查询!! 第一步:修改my.ini(mysql配置文件) 在my.ini中加上下面两句话 log-slow-que ...
- windows下mysql开启慢查询
mysql在windows系统中的配置文件一般是my.ini,我的路径是c:\mysql\my.ini,你根据自己安装mysql路径去查找 [mysqld] #The TCP/IP Port the ...
- Windows下模拟dns迭代查询过程
目录 dns解析过程 迭代与递归 dns解析过程 当在浏览器的搜索栏输入URL(统一资源定位符)时,浏览器的解析过程 完整解析 当在浏览器输入某一IP地址时 (1)浏览器查看查看缓存表里有没有对应的域 ...
- Windows下用命令行注销用户(包括注销其他用户)
一.使用cmd命令注销当前登录用户:logoff cmd启动命令窗口输入 logoff ,然后回车,就立刻注销当前登录用户了 二.使用cmd命令注销其他登录用户 cmd启动命令窗口输入:query u ...
- Windows下设备ID的查询
最近在整黑苹果,找驱动需要看设备是否支持.下面以我的的蓝牙设备举例 名称 全称 含义 vid vendor ID 提供商ID pid product ID 产品id 我们可以在下面的列表里头看到 In ...
- wmi获取硬件信息c语言,通过 WMI来获取本地计算机软件硬件信息
一网打尽 介绍及款工具 WMITools和WMICodeCreator 生成.net或vbs代码来操作WMI的. 您想需要怎么调用都可以了.具体怎么下,google或bing下吧. 相关脚本 'On ...
最新文章
- 微软CEO:我们员工以及他们家人的健康与安全是我们最高的优先级!
- 机器学习知识点(十九)矩阵特征值分解基础知识及Java实现
- ecshop 去除前台模板自动解析CSS/JS/IMG路径
- 如何批量转化成jpg格式_heic图片格式快速转换jpg,批量转换方法
- JDK8的排序大法!!
- MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
- memcached客户端_Memcached Java客户端示例
- magento模板中XML与phtml关系 [四]
- 简单封装retrofit2+rxjava2
- github协同工作流程(一)
- vs2008gridview自带删除功能代码怎么实现
- Ubuntu18.04运行QQ音乐
- 绍兴印象二 从三味书屋到百草园
- Unity3D移动平台简单实现
- 【django】如何获取字段最大值,最新的记录
- 把html页面保存为图片格式
- 纯电小型领军者 奇瑞无界Pro
- HPE服务器使用ILO5安装系统
- USB转串口芯片CH340系列及CH340模块使用方法(CH340驱动,接线,串口下载详细介绍)
- linux怎么安装输入法软件下载,百度输入法linux版下载