VC6运用WMI获取系统信息

VC6应用WMI获取系统信息

VC6应用WMI获取系统信息
2011年05月02日
  花费两天左右时间,总算可以在VC6下使用WMI技术了,现将遇到的问题及解决方法记录一下。
  起因是为了获取系统的硬件信息,经查阅可以使用WMI技术来实现,于CodeProject网站上下载了vc6使用WMI的示例程序,结果发现编译不成功。
  出错信息如下: fatal error C1083: Cannot open include file: 'wbemidl.h': No such file or directory 即"wbemidl.h"头文件未找到,于是乎跑到C:\下搜索该文件,发现有两处存在:
  C:\Program Files\Microsoft SDKs\Windows\v5.0\Include\WbemIdl.h
  C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WbemIdl.h
  让我惊异的发现存在"Microsoft SDKs"这样一个目录,通过目录中文件的时间信息判断,应该是安装VS2008时附带的。试图在VC6的Options -> Directories中添加头文件和Lib库的路径,但是仍然未能成功编译。
  查找资料发现,普遍认为不能再VC6中使用VS2008中附带的SDK,微软对VC6支持的最新的SDK版本为"PlatformSDK_2003_February", 并有下载页面:http://www.microsoft.com/msdownload/platformsdk/sd kupdate/psdk-full.htm,然而此页面已经不能正常打开了,点击时只能转到微软的下载中心首页。
  无奈之下在微软的下载中心查找PlatformSDK的下载信息,可以找到"Windows?? Server 2003 R2 Platform SDK"的下载,看到说明中提到了支持XP,便开始下载,但是没有看到说对VC6的支持。
  400多M的文件,下载速度还不给力,期间继续在网上搜寻,神奇的在微软社区找到了一篇帖子,帖中有人给出了"PlatformSDK_2003_February"的下载地址,引用如下: Here are the direct links to the Febuary 2003 SDK (build 5.2.3790.0): http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.2 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.3 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.4 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.5 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.6 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.7 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.8 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.9 .cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1 0.cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1 1.cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1 2.cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1 3.cab http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.b at http://download.microsoft.com/download/platformsdk /sdk/update/win98mexp/en-us/3790.0/FULL/Extract.exe You must download all files in the same directory. To extract the SDK on your HDD you must use the batch file. After extracting the SDK you can install it from your extraction directory. You can also burn it on a CD or DVD.   如获至宝,立即暂停了原有下载,开始下载这个版本。期间在网上看到有人使用VC6结合"Windows?? Server 2003 R2 Platform SDK"进行开发工作,但也是提出了一些疑问,不能确定可靠性,本人也就放弃了此项尝试。
  经过若干时间,终于完成下载,按照下载地址框中附带的安装说明,完成解压缩操作。安装时图省时,仅安装了WMI SDK,当然安装程序自动安装了相关依赖文件。
  安装完成后,在VC的Options -> Directories页面中添加相关搜索路径,再次进行编译,结果再次报错,报错信息如下: error C2065: 'CoInitializeSecurity' : undeclared identifier error C2065: 'EOAC_NONE' : undeclared identifier 这次应该不能是SDK的问题了,到SDK的Include目录安装路径"C:\Program Files\Microsoft SDK\include"中,搜索文本"CoInitializeSecurity",发现其定义在"OBJBASE.H"文件中,且使用一个预编译宏控制: #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) 在StdAfx.h中所有引用头文件语句之上,添加了一行定义: #define _WIN32_DCOM  Rebuild All,成功! 部分参考文章:
  1、Getting Information from WMI in Visual C++ http://www.codeproject.com/KB/system/Using_WMI_in_ Visual_C__.aspx 2、Microsoft Platform SDK - February 2003,用VC6的不能不知道的事件 3、【收藏】通过 WMI 获取系统信息 4、where download sdk server 2003 february edition ? http://social.msdn.microsoft.com/Forums/zh-CN/wind owssdk/thread/83205c43-ef46-447d-ae54-92bbeb543c38 btw: if this helps you, please let me know, thank you.