C#程序注册激活代码Word文档下载推荐.docx
《C#程序注册激活代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C#程序注册激活代码Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
如果由keyName指定的子项不存在,则返回null;
否则,返回与valueName关联的值;
或者,如果未找到valueName,则返回defaultValue。
例如,下面代码用来获取软件的使用次数:
tLong=(Int32)Registry.GetValue("
HKEY_LOCAL_MACHINE/SOFTWARE/tryTimes"
"
UseTimes"
0);
Registry类位于Microsoft.Win32命名空间下。
(2)Registry类的SetValue方法
Registry类的SetValue方法用来设置注册表项中的名称/值对的值,该方法为可重载方法,它有两种重载形式,第一种重载形式语法格式如下:
publicstaticvoidSetValue(stringkeyName,stringvalueName,Objectvalue)
value:
要存储的值。
第二种重载形式语法格式如下:
publicstaticvoidSetValue(stringkeyName,stringvalueName,Objectvalue,RegistryValueKindvalueKind)
valueKind:
存储数据时使用的注册表数据类型。
例如,本实例中将软件使用次数写入注册表的实现代码如下:
if(tLong<
30)
{
intTimes=tLong+1;
Registry.SetValue("
Times);
}
(3)ManagementClass类
ManagementClass类表示公共信息模型(CIM)管理类。
管理类是一个WMI类,如Win32_LogicalDisk类和Win32_Process类,前者表示磁盘驱动器,后者表示进程(如Notepad.exe)。
通过该类的成员,可以使用特定的WMI类路径访问WMI数据。
例如,本实例中使用ManagementClass类对本地进程信息进行访问,代码如下:
ManagementClassmyCpu=newManagementClass("
win32_Processor"
);
(4)ManagementObject类
ManagementObject类表示WMI实例,本实例中用到该类的Get方法、GetPropertyValue方法和Properties属性,其中Get方法用来将WMI类信息绑定到管理对象,其语法格式如下:
publicvoidGet()
GetPropertyValue方法用来获取某属性值的等效访问器,其语法格式如下:
publicObjectGetPropertyValue(stringpropertyName)
propertyName:
相关的属性的名称。
指定的属性的值。
例如,本实例中获取硬盘序列号的代码如下:
ManagementObjectdisk=newManagementObject("
win32_logicaldisk.deviceid="
d:
"
disk.Get();
returndisk.GetPropertyValue("
VolumeSerialNumber"
).ToString();
Properties属性用来获取描述管理对象属性的PropertyData对象的集合,其语法格式如下:
publicvirtualPropertyDataCollectionProperties{get;
}
属性值:
返回一个PropertyDataCollection,它包含管理对象的属性。
例如,本实例中获取CPU序列号的代码如下:
foreach(ManagementObjectmyObjectinmyCpuConnection)
strCpu=myObject.Properties["
Processorid"
].Value.ToString();
break;
(5)ManagementObjectCollection类
ManagementObjectCollection类表示通过WMI检索到的管理对象的不同集合,此集合中的对象为从ManagementBaseObject派生的类型,包括ManagementObject和ManagementClass。
例如,本实例中通过使用ManagementClass对象的GetInstances方法获取管理对象集合,代码如下:
ManagementObjectCollectionmyCpuConnection=myCpu.GetInstances();
ManagementClass类、ManagementObject类和ManagementObjectCollection类都位于System.Management命名空间下,添加该命名空间时,首先需要在“添加引用”中添加System.Management.dll组件。
实现过程
(1)新建一个Windows应用程序,将其命名为LimitSoftUseTimes,将其默认窗体重命名为frmMain。
(2)在LimitSoftUseTimes项目中添加一个Windows窗体,命名为frmRegister,用来实现软件注册功能。
frmRegister窗体主要用到的控件及说明如表1所示。
表1frmRegister窗体主要用到的控件及说明
(3)主要程序代码。
frmMain窗体加载时,首先判断程序是否注册,如果已经注册,则将主窗体Text属性设置为“主窗体(已注册)”,否则,将主窗体Text属性设置为“主窗体(未注册)”,并且提示软件为试用版和已经使用的次数,同时将注册表中记录的软件使用次数加一。
frmMain窗体的Load事件代码如下:
privatevoidfrmMain_Load(objectsender,EventArgse)
RegistryKeyretkey=Microsoft.Win32.Registry.LocalMachine.OpenSubKey("
software"
true).CreateSubKey("
mrwxk"
).CreateSubKey("
mrwxk.ini"
//打开注册表项
foreach(stringstrRNuminretkey.GetSubKeyNames())//判断是否注册
if(strRNum==softreg.getRNum())//判断注册码是否相同
this.Text="
主窗体(已注册)"
;
button1.Enabled=false;
return;
主窗体(未注册)"
button1.Enabled=true;
MessageBox.Show("
您现在使用的是试用版,该软件可以免费试用30次!
提示"
MessageBoxButtons.OK,MessageBoxIcon.Information);
Int32tLong;
try
//获取软件的已经使用次数
感谢您已使用了"
+tLong+"
次"
catch
//首次使用软件
0,RegistryValueKind.DWord);
欢迎新用户使用本软件"
//获取软件已经使用次数
//计算软件本次是第几次使用
//将软件使用次数写入注册表
else
试用次数已到"
警告"
MessageBoxButtons.OK,MessageBoxIcon.Warning);
Application.Exit();
//退出应用程序
上面的代码中用到getRNum方法,该方法用来根据指定的机器码生成注册码,实现代码如下:
//生成注册码
publicstringgetRNum()
setIntCode();
//初始化127位数组
for(inti=1;
i<
Charcode.Length;
i++)//把机器码存入数组中
Charcode[i]=Convert.ToChar(this.getMNum().Substring(i-1,1));
for(intj=1;
j<
intNumber.Length;
j++)//把字符的ASCII值存入一个整数组中。
intNumber[j]=intCode[Convert.ToInt32(Charcode[j])]+Convert.ToInt32(Charcode[j]);
stringstrAsciiName="
//用于存储注册码
j++)
if(intNumber[j]>
=48&
&
intNumber[j]<
=57)//判断字符ASCII值是否0-9之间
strAsciiName+=Convert.ToChar(intNumber[j]).ToString();
elseif(intNumber[j]>
=65&
=90)//判断字符ASCII值是否A-Z之间
=97&
=122)//判断字符ASCII值是否a-z之间
else//判断字符ASCII值不在以上范围内
122)//判断字符ASCII值是否大于z
strAsciiName+=Convert.ToChar(intNumber[j]-10).ToString();
strAsciiName+=Convert.ToChar(intNumber[j]-9).ToString();
returnstrAsciiName;
//返回生成的注册码
在frmMain窗体中单击“注册”按钮时,弹出“软件注册”窗体,该窗体加载时自动获得本机机器码,实现代码如下:
privatevoidfrmRegister_Load(objectsender,EventArgse)
textBox1.Text=softreg.getMNum();
上面的代码中用到getMNum方法,该方法为自定义的返回值类型为string类型的方法,它主要用来根据本机的CPU和硬盘序列号生成本机机器码。
getMNum方法实现代码如下:
//生成机器码
publicstringgetMNum()
stringstrNum=getCpu()+GetDiskVolumeSerialNumber();
//获得24位Cpu和硬盘序列号
stringstrMNum=strNum.Substring(0,24);
//从生成的字符串中取出前24个字符做为机器码
returnstrMNum;
//返回生成的机器码
getMNum方法中用到getCpu和GetDiskVolumeSerialNumber两个自定义方法,其中getCpu方法用来获取本机CPU序列号,GetDiskVolumeSerialNumber方法用来获取本机硬盘序列号,它们的实现代码如下:
//获得CPU的序列号
publicstringgetCpu()
stringstrCpu=null;
//获取系统CPU处理器
//获取CPU序列号
returnstrCpu;
//取得设备硬盘的序列号
publicstringGetDiskVolumeSerialNumber()
//获取系统硬盘
ManagementClassmc=newManagementClass("
Win32_NetworkAdapterConfiguration"
//返回硬盘序列号
frmRegister窗体中单击“注册”按钮时,程序首先判断是否输入注册码,如果没有,弹出信息提示,否则判断用户输入的注册码与本机应该生成的注册码是否相同,如果相同,则注册成功,并将软件注册信息写入到注册表中。
“注册”按钮的Click事件代码如下:
privatevoidbutton1_Click(objectsender,EventArgse)
if(textBox2.Text=="
)//判断是否输入了注册码
注册码输入不能为空!
if(textBox2.Text.Equals(softreg.getRNum()))//判断注册码是否正确
).CreateSubKey(textBox2.Text);
//打开注册表项,并创建一个子项
retkey.SetValue("
UserName"
mrsoft"
//为新创建的注册表项设置值
注册成功,程序需要重新加载!
this.Hide();
//隐藏当前窗体
frmMainfrmmain=newfrmMain()//实例化主窗体对象;
frmmain.Show();
//显示主窗体
注册码输入错误!
错误"
MessageBoxButtons.OK,MessageBoxIcon.Error);
------------------------------------------------------------------------------------------------------
代码示例:
注册类:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Management;
namespaceSoftRegister
publicclassSoftReg
{
///<
summary>
///获取硬盘卷标号
/summary>
returns>
<
/returns>
privatestringGetDiskVolumeSerialNumber()
ManagementClassmc=newManagementClass("
win32_NetworkAdapterConfiguration"
ManagementObjectdisk=newManagementObject("
win32_logicaldisk.deviceid=\"
c:
\"
disk.Get();
returndisk.GetPropertyValue("
///获取CPU序列号
privatestringGetCpu()
stringstrCpu=null;
ManagementClassmyCpu=newManagementClass("
ManagementObjectCollectionmyCpuCollection=myCpu.GetInstances();
foreach(ManagementObjectmyObjectinmyCpuCollection)
strCpu=myObject.Properties["
returnstrCpu;
///生成机器码
publicstringGetMNum()
stringstrNum=GetCpu()+GetDiskVolumeSerialNumber();
stringstrMNum=strNum.Substring(0,24);
//截取前24位作为机器码
returnstrMNum;
privateint[]intCode=newint[127];
//存储密钥
privatechar[]charCode=newchar[25];
//存储ASCII码
privateint[]intNumber=newint[25];
//存储ASCII码值
//初始化密钥
privatevoidSetIntCode()
for