获取机器属性
Posted
技术标签:
【中文标题】获取机器属性【英文标题】:Get machine properties 【发布时间】:2008-11-30 16:35:07 【问题描述】:我想编写一个程序来识别机器(用于许可目的),我想获取以下信息并用这些数据编译一个 xml 文件:
-
MAC 地址。
CPU 数据(串行、制造等)
主板识别。 (系列、制造等)
有人可以向我推荐一个提供此类信息的库 - 我用 C++ 编写程序,但很难找到这样的库。
我应该在注册表中挖掘这些信息吗?
非常感谢, 提供
【问题讨论】:
【参考方案1】:使用WMI 并获取主板的序列号就足够了(其他选项不太安全,因为旧计算机可能没有网络适配器和/或 CPU 比主板更可能更换)。
【讨论】:
值得注意的是,MAC地址可能有多个,而且变化非常频繁(例如笔记本内置WiFi卡,内部通过USB连接,不用时可能完全消失); ..而且 WMI 可以在目标机器上禁用,并且在旧系统(Win2K、Win9x)上不存在。但是,就兼容性而言,WMI 仍然是最好的选择。【参考方案2】:GetAdaptersInfo() 将为您提供 MAC 地址。下面是一个如何将其用于此目的的示例。
/** *************************************
return string containing first MAC address on computer
NOTE: requires adding Iphlpapi.lib to project
*/
string GetMac()
char data[4096];
ZeroMemory( data, 4096 );
unsigned long len = 4000;
PIP_ADAPTER_INFO pinfo = ( PIP_ADAPTER_INFO ) data;
char sbuf[20];
string sret;
DWORD ret = GetAdaptersInfo( pinfo, &len );
if( ret != ERROR_SUCCESS )
return string("**ERROR**");
for(int k = 0; k < 5; k++ )
sprintf(sbuf,"%02X-",pinfo->Address[k]);
sret += sbuf;
sprintf(sbuf,"%02X",pinfo->Address[5]);
sret += sbuf;
return( sret );
有关执行此类操作的完整系统示例,请查看 Manuele Sicuteri 在 CodeProject 上的 article。
【讨论】:
【参考方案3】:不要使用 WMI(速度慢,未安装在 NT 上) 使用标准 Win32 api
见新闻://comp.os.ms-windows.programmer.win32 几十年来,所有这些问题都得到了解答(C /++ 代码)
【讨论】:
您能详细说明一下吗?链接或基本摘录将不胜感激。您按原样回答有点没用。 请您指出应该使用的具体win32 API吗?以上是关于获取机器属性的主要内容,如果未能解决你的问题,请参考以下文章