各位高手,强烈求助!!! 如何在VC++编程中,提取主板的产品序列号,通过everest软件可以提取,但是不知道原理!

zhongshi_1 2007-03-09 03:54:34

各位大哥大姐:
我现在面临个困难,如何在vc++编程中,通过函数提取出本机主板上的硬件信息,system_info类里没有提取主板的相关函数!哪位大哥大姐做过这方面的东西,帮帮小弟啊!感激涕泠!!!
我现在要做一个软件的认证模块,想把本机的硬件信息与注册的账号密码绑定在一起,确保只能在注册的唯一一台机器上使用这个软件!所以这个提取主板信息是个关键问题!恳请各位帮忙了!
希望给我一些原代码!
...全文
805 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hping1016 2011-09-21
  • 打赏
  • 举报
回复
你也可以获取硬盘的序列号,用它来作为一个唯一识别码
yoyojoyinyin 2011-09-21
  • 打赏
  • 举报
回复
我现在面临个困难,如何在vc++编程中,通过函数提取出本机主板上的硬件信息,system_info类里没有提取主板的相关函数!哪位大哥大姐做过这方面的东西,帮帮小弟啊!感激涕泠!!!
我现在要做一个软件的认证模块,想把本机的硬件信息与注册的账号密码绑定在一起,确保只能在注册的唯一一台机器上使用这个软件!所以这个提取主板信息是个关键问题!恳请各位帮忙了!
希望给我一些原代码!


houji7327673393 2011-09-21
  • 打赏
  • 举报
回复
upsssssss
ljhhh0123 2011-09-21
  • 打赏
  • 举报
回复
用cpuid不行么?
我用winhex对物理内存搜索了一下,在rom区有主板型号信息。在640k到1MB之间。
但我不知道用什么标准方法可以准确的定位出来。
JackieLu2004 2008-11-17
  • 打赏
  • 举报
回复
同问用WMI获得主板的序列号是唯一的吗?

我最近在用C++做一个项目 用的就是LZ的方法 但是我发现有时候在一些机器上读不到这个序列号 不知道是怎么回事?

高手帮忙指点下 谢谢 ~~
xuejinn 2007-03-18
  • 打赏
  • 举报
回复
mark
zhongshi_1 2007-03-18
  • 打赏
  • 举报
回复
谢谢!!
另外还有个小问题,
从注册表中可以提取一些和主板有关的信息,但是似乎不能作为唯一确定机器的表示,因为很多都会重复!而我用过的everest软件就可以做到,他是将很多主板的属性都结合在一起,比如说格式是这样的: 主板的生产日期-主板的厂商-主板的序列号-主办的型号
而注册表中里边显示的和主板有关的信息只有生产日期和厂商以及版本号,光凭这几项无法定位机器,因为同一批的产品很多有版本号和生产日期都是一样的!而其他的信息比如 序列号,可能是以二进制形式存储在注册表中!

所以我想再麻烦问一下,使用WMI的话,提取的原理是从注册表中获取吧?那样的话,能唯一确定某个机器么?

我也自己找一下WMI相关的代码试试,,,
再次谢谢各位!!
qhgary 2007-03-11
  • 打赏
  • 举报
回复
用WMI吧!
去微软的网站down一个WMI的SDK,里边有一个例程看看就知道了。(除了.net的也有C++能用的)

概述:



不知道大家有没有这种体会?有时候为了获取系统一点点信息,比如考虑一下操作系统的版本号,或者当前屏幕的分辨率。其实说到底就是读操作系统某个方面的一个属性值而已,然后就看到我们的程序中密密麻麻的Win32 API申明,调用,代码的可读性和维护性不言而喻。到了.NET,微软提供了更为丰富的类,有很多以前要调用API的方法可以在.NET中轻而易举的调用实现。今天简单介绍一个在.NET中如何通过与WMI(Windows 管理规范)的通讯,从而得到获取信息的目的。



主要思路:



举一个获取操作系统共享目录和获取主板号的例子,介绍如何利用System.Managment下面的类获取系统相关的信息:



正文:



WMI(Windows管理规范:Windows Management Instrumentation)是Microsoft基于Web的企业管理(WBEM)的实现,同时也是一种基于标准的系统管理接口。WMI最早出现在Microsoft Windows 2000系统上,但它同样可以安装在Windows NT 4和Windows 9x计算机上。WMI是一种轻松获取系统信息的强大工具。



在.NET中,有一个System.Management名空间(系统默认没有引用,我们可以手动添加引用),通过下面的Class的操作,可以查询系统软硬件的信息,先看一个简单的例子:







Imports System.Management

Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_share")

Dim share As ManagementObject

For Each share In searcher.Get()

MessageBox.Show(share.GetText(TextFormat.Mof))

Next share

运行的结果是列出了所有系统当前共享的目录、以及描述等等。



分析一下上面的代码,可以看到一下几点:

1、似乎是在进行数据库操作,有点像SQL语句。其实就是SQL操作,这种语句被成WQL(WMI Query Language),实际上是标准SQL的一个子集加上了WMI的扩展.

2、WQL是个只读的查询语言,我们只能查询响应的数据,不能用UPDATE,INSERT等更新操作

3、代码很简单、通俗易懂

4、我们采用了一种MOF(托管对象格式)的显示。



例子二:获取当前主板的信息

上面的例子是一个软件方面的信息,下面看一个获取硬件信息的例子,获取主板的序列号以及制造商:






Dim searcher As New ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard")

Dim share As ManagementObject

For Each share In searcher.Get()

Debug.WriteLine("主板制造商:" & share("Manufacturer"))

Debug.WriteLine("型号:" & share("Product"))

Debug.WriteLine("序列号:" & share("SerialNumber"))

Next share


总结以及补充:



WMI类也是分层次的,具体可以参考msdn中的WMI;转向.NET平台开发的时候,最好能多看一些关于.NET新特性的介绍,这样可以大幅度的提升代码的开发效率以及运行效率。
MeAgainstTheWorld 2007-03-09
  • 打赏
  • 举报
回复
这个保护没用的,很容易欺骗的
taodm 2007-03-09
  • 打赏
  • 举报
回复
你问的问题不知道,怎么搞掉你的这个保护倒会一些。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧