如何取得客户机的机器码?软件注册码,机器码是怎么回事?

chenzhirun 2009-03-15 10:50:53
我想要获得机器码等,必须要能读取硬件的某个参数,并且读出来的是唯一的能和其它机器区分的。目前有那几种方法了:1、网卡mac,可是这个东西经常读出来的是用户上网的虚拟卡mac,很多用户都一样,就算读出来的是物理的,本机的,如有2个网卡,如果用户设置禁用了一个网卡,那机器没变读出来的mac和以前的也不一样了。2、盘序列号,可是这个没有工业标准,不能保证唯一,听说有的硬盘还读不出来。3、cpu,主板的序列号都不能保证唯一。怎么办了?目前一些商业软件不知道是如何处理的?他们用机器码、注册码等,单我想如果不能读出硬件唯一号是无法实现的,请个位同仁给点意见,谢谢。
...全文
1514 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhirun 2009-03-20
  • 打赏
  • 举报
回复
同志们,支持一下啊,网上查了很多这方面的资料,我试验了一下,都是不太确定,比如5楼的,网上很多帖子都是这样说的,可实际读出来的是硬盘型号,那很多硬盘的型号是一样的,没有用处,高手们给点思路啊
chenzhirun 2009-03-17
  • 打赏
  • 举报
回复
顶一下啊
chenzhirun 2009-03-16
  • 打赏
  • 举报
回复
to:5楼,你这个读取硬盘id的方法我试了下,实际读取的是硬盘的型号,和优化大师读取的一样,都是型号,那同一厂家同一批次的硬盘型号应该是一样的,缺乏唯一性。真正读取硬盘Id的方法是什么了?
liuhengwinner 2009-03-16
  • 打赏
  • 举报
回复
呵呵,不错!
深海之蓝 2009-03-16
  • 打赏
  • 举报
回复
c#可以通过 读取机器的硬盘,cpuid,和网卡物理地址
//获取cpuid
private string GetCpuID()
{
string CpuInfo = "";
ManagementClass cimobject = new
ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
CpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
return CpuInfo;
}
//获取硬盘id
private string GetHardID()
{
string HDInfo = "";
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
HDInfo = (string)mo.Properties["Model"].Value;
}
return HDInfo;
}
//获取网卡物理地址
private string GetMacAddress()
{
string MacAddress = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc2 = mc.GetInstances();
foreach (ManagementObject mo in moc2)
{
if ((bool)mo["IPEnabled"] == true)
MacAddress = mo["MacAddress"].ToString();
mo.Dispose();
}
return MacAddress;
}
不过cpuid 同一批的cpu是一样的,而网卡物理地址是可以更改的,只有硬盘编号是不能改的,重装了也不行,所以推荐用硬盘id,读取之后可以用md5加密,就生成了唯一的序列号
wenblue7 2009-03-16
  • 打赏
  • 举报
回复
狂顶
chenzhirun 2009-03-16
  • 打赏
  • 举报
回复
liujiayu10:你好,你读取的c盘的序列号吧,右击C盘,点击属性菜单能看到这个序列号吗?我听说整个硬盘有序列号,还有id号,这2个是不同的,如何读取了?还有你这个API函数,我用c#写程序,如何使用了?指点一下啊,谢谢
liujiayu10 2009-03-16
  • 打赏
  • 举报
回复
Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Global GetVal As Long '注册

'<<< 读取是否注册的信息,如何控制这里不再说明
Dim TempStr1 As String * 256
Dim TempStr2 As String * 256
Dim TempLon1 As Long
Dim TempLon2 As Long
Call GetVolumeInformation("C:", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)
'>>>

'提取本机C盘的序列号至文本框一
Text1.Text = GetVal
EveryCase 2009-03-16
  • 打赏
  • 举报
回复
顶 ~~~~~~~~~~~~~~

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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