C++调用WMI类查询获取操作系统名(实例)
#define _WIN32_DCOM
#include <iostream>
#include <comdef.h>
#include <Wbemidl.h>using namespace std;#pragma comment(lib, "wbemuuid.lib")int main(int argc, char **argv)
{HRESULT hres;// 第一步:初始化COMhres = CoInitializeEx(0, COINIT_MULTITHREADED);if (FAILED(hres)){cout << "Failed to initialize COM library. Error code = 0x"<< hex << hres << endl;return 1; // Program has failed.}// 第二步:设置COM安全级别hres = CoInitializeSecurity(NULL,-1, // COM 认证NULL, // 服务认证NULL, // 保留NULLRPC_C_AUTHN_LEVEL_DEFAULT, // 默认权限RPC_C_IMP_LEVEL_IMPERSONATE, // 默认模拟NULL, // 认证信息EOAC_NONE, // Additional capabilitiesNULL // Reserved);if (FAILED(hres)){cout << "安全级别初始化失败,错误代码 = 0x" << hex << hres << endl;CoUninitialize();return 1; // Program has failed.}// 第三步:获取初始化本地WMIIWbemLocator *pLoc = NULL;hres = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *)&pLoc);if (FAILED(hres)){cout << "创建IWbemLocator对象失败,错误代码 = 0x" << hex << hres << endl;CoUninitialize();return 1; // Program has failed.}// 第四步:通过 IWbemLocator::ConnectServer 方法连接WMIIWbemServices *pSvc = NULL;// 使用IWbemServices 连接 root\cimv2 命名空间hres = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), // 对象路径NULL, // 用户名为空默认当前用户NULL, // 用户密码为空默认当前密码0, // 本地,NULL表示当前NULL, // 安全标志0, // 授权人0, // 上下文对象&pSvc // IWbemServices代理指针);if (FAILED(hres)){cout << "无法连接,错误代码 = 0x" << hex << hres << endl;pLoc->Release();CoUninitialize();return 1; // Program has failed.}cout << "已连接到 ROOT\\CIMV2 WMI 命名空间" << endl;// 第五步:设置代理安全级别hres = CoSetProxyBlanket(pSvc, // 要设置的代理指针RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxxRPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxxNULL, // 委托服务名RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxxRPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxxNULL, // 客户端身份EOAC_NONE // 代理能力);if (FAILED(hres)){cout << "代理设置失败,错误代码 = 0x" << hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1; // Program has failed.}// 第六步:使用 IWbemServices 指针获取系统名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)){cout << "查询系统名失败,错误代码 = 0x" << hex << hres << endl;pSvc->Release();pLoc->Release();CoUninitialize();return 1; // Program has failed.}// 第七步:获取查询数据IWbemClassObject *pclsObj = NULL;ULONG uReturn = 0;while (pEnumerator){HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,&pclsObj, &uReturn);if (0 == uReturn){break;}VARIANT vtProp;// 获取Name属性值hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);wcout << " 系统名 : " << vtProp.bstrVal << endl;VariantClear(&vtProp);pclsObj->Release();}// 清理工作pSvc->Release();pLoc->Release();pEnumerator->Release();CoUninitialize();system("pause");return 0; // Program successfully completed.}
说明都在源码注释里,效果图:
C++调用WMI类查询获取操作系统名(实例)相关推荐
- java中遍历实体类,获取属性名和属性值
方式一(实体类): //java中遍历实体类,获取属性名和属性值public static void testReflect(Object model) throws Exception{for (F ...
- Java工具类(获取当前主机操作系统名)
package com.fly.jenkins.util;/*** 操作系统类: 获取System.getProperty("os.name")对应的操作系统* * @author ...
- 查询出的数据记录字段要与实体类中的属性名一致
查询出的数据记录字段要与实体类中的属性名一致 转载于:https://www.cnblogs.com/1020182600HENG/p/6183031.html
- java 获取包名类名_获取指定包名下的所有类的类名(全名)
参考来源: 以下代码一键运行: package test; import java.io.File; import java.io.IOException; import java.net.JarUR ...
- java主类与源代码名称_java 获取操作系统名称 附源代码
记得刚入手 在写跨平台代码的时候,有一些操作是与平台有关的,这个时候,准确地了解软件是在哪个平台下进行工作就显得非常重要了,知道了软件在哪种类型的操作系统下工作,分别编写不同的代码,就可以让整个软件地 ...
- File类如何获取文件后缀名
File类如何获取文件后缀名 /*** 获取指定文件或文件夹的后缀名* @param fileName 文件名称* @return*/public static String getFileSuffi ...
- 如何调用封装工具类调用网上接口查询工作日
如何调用封装工具类调用网上接口查询工作日 这里的编辑器是STS,用的springboot集成环境: 先引进pom.xml依赖包 <?xml version="1.0" enc ...
- java 变量名_java获取类中的变量名(利用反射机制)
要获取的类: package com.jzxk.server.entities.player; public class Hero { public int Id; public String log ...
- java中调用_如何获取Java中的调用方类
小编典典 你可以生成堆栈跟踪并使用StackTraceElements中的信息. 例如,实用程序类可以为你返回调用类名称: public class KDebug { public static St ...
最新文章
- 小蚂蚁学习mysql性能优化(5)--SQL以及索引优化--需要添加索引的列
- UA MATH564 概率论 多元随机变量的变换 理论与应用2
- 如何修改cmd控制台默认编码为utf-8
- webgl内置函数--通用函数
- 手把手教你用CAB发布OCX的简单办法
- 2如何识别操作系统_扫描车牌识别车牌号的功能sdk
- 做图表统计你需要掌握SQL Server 行转列和列转行
- java实现邮件发送, 抄送及多附件发送
- mac系统用什么linux远程工具,推荐几个Mac/Linux下比较好用的工具
- java语言飞机大战代码_飞机大战JAVA代码
- 计算机监控系统sacad,一套幼儿园智能化弱电CAD设计图,可以作为投标技术文件模板...
- 设计一个几何图形的面积计算器,希望这个计算器可以计算圆和矩形等图形的面积
- 08系统装iss_安全信息系统| ISS | 第1部分
- 石河子大学计算机专业录取分数线,石河子大学2020年录取分数线(附2017-2020年分数线)...
- centos7 mysql启动后端口,centos安装mysql后3306端口不通_网站服务器运行维护
- 在MAC下解决MAC unable to execute sex :GC overhead limit exceeded GC overhead的问题
- html中循环生成表格数据,动态生成表格(简单实现)
- t检验中的t值和p值是什么关系_t检验和p值的关系
- 区块链 重塑不良资产互信机制
- openshift介绍与应用
热门文章
- 电脑怎么卸载软件干净_不要说你的电脑卸载很干净!分享两款卸载神器!
- 轨迹相似性度量方法总结
- Adobe illustrator 排版后图形导出这样的Tiff/PNG - 连载 3
- 20W+喜爱的Pathview网页版 | 整合表达谱数据KEGG通路可视化
- 加拿大生信开源学习资源Bioinformatics.ca
- VideoSolo Blu ray Player for Mac - 强大的蓝光播放器
- Tuxera NTFS使用教程:关于Tuxera NTFS mac还有你不知道的用法
- AE进度条读取动画插件 LoadUP 1.71
- lnmp 清除mysql日志,军哥LNMP 如何关闭 Mysql 日志,并且删除 mysql-bin.0000*日志文件...
- 基于matlab数字识别算法系统设计与实现(含源文件)