获取机器属性

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吗?

以上是关于获取机器属性的主要内容,如果未能解决你的问题,请参考以下文章

如何获取到JAVA对象所在的内存地址

TypeError:无法读取未定义的 guild.roles 的属性“获取”

机器人框架从 JSON 列表中获取

如何让不和谐的机器人获取昵称而不是用户名?

JSON 获取属性值的方法

BigQuery 没有获取在 java 中设置的属性