#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类查询获取操作系统名(实例)相关推荐

  1. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值public static void testReflect(Object model) throws Exception{for (F ...

  2. Java工具类(获取当前主机操作系统名)

    package com.fly.jenkins.util;/*** 操作系统类: 获取System.getProperty("os.name")对应的操作系统* * @author ...

  3. 查询出的数据记录字段要与实体类中的属性名一致

    查询出的数据记录字段要与实体类中的属性名一致 转载于:https://www.cnblogs.com/1020182600HENG/p/6183031.html

  4. java 获取包名类名_获取指定包名下的所有类的类名(全名)

    参考来源: 以下代码一键运行: package test; import java.io.File; import java.io.IOException; import java.net.JarUR ...

  5. java主类与源代码名称_java 获取操作系统名称 附源代码

    记得刚入手 在写跨平台代码的时候,有一些操作是与平台有关的,这个时候,准确地了解软件是在哪个平台下进行工作就显得非常重要了,知道了软件在哪种类型的操作系统下工作,分别编写不同的代码,就可以让整个软件地 ...

  6. File类如何获取文件后缀名

    File类如何获取文件后缀名 /*** 获取指定文件或文件夹的后缀名* @param fileName 文件名称* @return*/public static String getFileSuffi ...

  7. 如何调用封装工具类调用网上接口查询工作日

    如何调用封装工具类调用网上接口查询工作日 这里的编辑器是STS,用的springboot集成环境: 先引进pom.xml依赖包 <?xml version="1.0" enc ...

  8. java 变量名_java获取类中的变量名(利用反射机制)

    要获取的类: package com.jzxk.server.entities.player; public class Hero { public int Id; public String log ...

  9. java中调用_如何获取Java中的调用方类

    小编典典 你可以生成堆栈跟踪并使用StackTraceElements中的信息. 例如,实用程序类可以为你返回调用类名称: public class KDebug { public static St ...

最新文章

  1. 小蚂蚁学习mysql性能优化(5)--SQL以及索引优化--需要添加索引的列
  2. UA MATH564 概率论 多元随机变量的变换 理论与应用2
  3. 如何修改cmd控制台默认编码为utf-8
  4. webgl内置函数--通用函数
  5. 手把手教你用CAB发布OCX的简单办法
  6. 2如何识别操作系统_扫描车牌识别车牌号的功能sdk
  7. 做图表统计你需要掌握SQL Server 行转列和列转行
  8. java实现邮件发送, 抄送及多附件发送
  9. mac系统用什么linux远程工具,推荐几个Mac/Linux下比较好用的工具
  10. java语言飞机大战代码_飞机大战JAVA代码
  11. 计算机监控系统sacad,一套幼儿园智能化弱电CAD设计图,可以作为投标技术文件模板...
  12. 设计一个几何图形的面积计算器,希望这个计算器可以计算圆和矩形等图形的面积
  13. 08系统装iss_安全信息系统| ISS | 第1部分
  14. 石河子大学计算机专业录取分数线,石河子大学2020年录取分数线(附2017-2020年分数线)...
  15. centos7 mysql启动后端口,centos安装mysql后3306端口不通_网站服务器运行维护
  16. 在MAC下解决MAC unable to execute sex :GC overhead limit exceeded GC overhead的问题
  17. html中循环生成表格数据,动态生成表格(简单实现)
  18. t检验中的t值和p值是什么关系_t检验和p值的关系
  19. 区块链 重塑不良资产互信机制
  20. openshift介绍与应用

热门文章

  1. 电脑怎么卸载软件干净_不要说你的电脑卸载很干净!分享两款卸载神器!
  2. 轨迹相似性度量方法总结
  3. Adobe illustrator 排版后图形导出这样的Tiff/PNG - 连载 3
  4. 20W+喜爱的Pathview网页版 | 整合表达谱数据KEGG通路可视化
  5. 加拿大生信开源学习资源Bioinformatics.ca
  6. VideoSolo Blu ray Player for Mac - 强大的蓝光播放器
  7. Tuxera NTFS使用教程:关于Tuxera NTFS mac还有你不知道的用法
  8. AE进度条读取动画插件 LoadUP 1.71
  9. lnmp 清除mysql日志,军哥LNMP 如何关闭 Mysql 日志,并且删除 mysql-bin.0000*日志文件...
  10. 基于matlab数字识别算法系统设计与实现(含源文件)