您的位置:首页 > 编程语言 > C#

C#注册机与绑定软件(转发自:韩兆新的博客园的C#学习笔记——软件注册与注册机)

2015-07-15 18:03 796 查看
(一)软件的实现:

SoftReg类:

1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Management;    //需要引用System.Management.dll
6:
7: namespace SoftRegister
8: {
9:     class SoftReg
10:     {
11:         ///<summary>
12:         /// 获取硬盘卷标号
13:         ///</summary>
14:         ///<returns></returns>
15:         public string GetDiskVolumeSerialNumber()
16:         {
17:             ManagementClass mc = new ManagementClass("win32_NetworkAdapterConfiguration");
18:             ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
19:             disk.Get();
20:             return disk.GetPropertyValue("VolumeSerialNumber").ToString();
21:         }
22:
23:         ///<summary>
24:         /// 获取CPU序列号
25:         ///</summary>
26:         ///<returns></returns>
27:         public string GetCpu()
28:         {
29:             string strCpu = null;
30:             ManagementClass myCpu = new ManagementClass("win32_Processor");
31:             ManagementObjectCollection myCpuCollection = myCpu.GetInstances();
32:             foreach (ManagementObject myObject in myCpuCollection)
33:             {
34:                 strCpu = myObject.Properties["Processorid"].Value.ToString();
35:             }
36:             return strCpu;
37:         }
38:
39:         ///<summary>
40:         /// 生成机器码
41:         ///</summary>
42:         ///<returns></returns>
43:         public string GetMNum()
44:         {
45:             string strNum = GetCpu() + GetDiskVolumeSerialNumber();
46:             string strMNum = strNum.Substring(0, 24);    //截取前24位作为机器码
47:             return strMNum;
48:         }
49:
50:         public int[] intCode = new int[127];    //存储密钥
51:         public char[] charCode = new char[25];  //存储ASCII码
52:         public int[] intNumber = new int[25];   //存储ASCII码值
53:
54:         //初始化密钥
55:         public void SetIntCode()
56:         {
57:             for (int i = 1; i < intCode.Length; i++)
58:             {
59:                 intCode[i] = i % 9;
60:             }
61:         }
62:
63:         ///<summary>
64:         /// 生成注册码
65:         ///</summary>
66:         ///<returns></returns>
67:         public string GetRNum()
68:         {
69:             SetIntCode();
70:             string strMNum = GetMNum();
71:             for (int i = 1; i < charCode.Length; i++)   //存储机器码
72:             {
73:                 charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));
74:             }
75:             for (int j = 1; j < intNumber.Length; j++)  //改变ASCII码值
76:             {
77:                 intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
78:             }
79:             string strAsciiName = "";   //注册码
80:             for (int k = 1; k < intNumber.Length; k++)  //生成注册码
81:             {
82:
83:                 if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]
84:                     <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122))  //判断如果在0-9、A-Z、a-z之间
85:                 {
86:                     strAsciiName += Convert.ToChar(intNumber[k]).ToString();
87:                 }
88:                 else if (intNumber[k] > 122)  //判断如果大于z
89:                 {
90:                     strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();
91:                 }
92:                 else
93:                 {
94:                     strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();
95:                 }
96:             }
97:             return strAsciiName;
98:         }
99:     }
100: }


主窗体:





1: using System;
2: using System.Collections.Generic;
3: using System.ComponentModel;
4: using System.Data;
5: using System.Drawing;
6: using System.Linq;
7: using System.Text;
8: using System.Windows.Forms;
9: using Microsoft.Win32;
10:
11: namespace SoftRegister
12: {
13:     public partial class FormMain : Form
14:     {
15:         public FormMain()
16:         {
17:             InitializeComponent();
18:         }
19:
20:         SoftReg softReg = new SoftReg();
21:
22:         private void FormMain_Load(object sender, EventArgs e)
23:         {
24:             //判断软件是否注册
25:             RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI");
26:             foreach (string strRNum in retkey.GetSubKeyNames())
27:             {
28:                 if (strRNum == softReg.GetRNum())
29:                 {
30:                     this.labRegInfo.Text = "此软件已注册!";
31:                     this.btnReg.Enabled = false;
32:                     return;
33:                 }
34:             }
35:             this.labRegInfo.Text = "此软件尚未注册!";
36:             this.btnReg.Enabled = true;
37:             MessageBox.Show("您现在使用的是试用版,可以免费试用30次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
38:
39:             Int32 tLong;    //已使用次数
40:             try
41:             {
42:                 tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);
43:                 MessageBox.Show("您已经使用了" + tLong + "次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
44:             }
45:             catch
46:             {
47:                 MessageBox.Show("欢迎使用本软件!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
48:                 Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0, RegistryValueKind.DWord);
49:             }
50:
51:             //判断是否可以继续试用
52:             tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);
53:             if (tLong < 30)
54:             {
55:                 int tTimes = tLong + 1;
56:                 Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", tTimes);
57:             }
58:             else
59:             {
60:                 DialogResult result = MessageBox.Show("试用次数已到!您是否需要注册?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
61:                 if (result == DialogResult.Yes)
62:                 {
63:                     FormRegister.state = false; //设置软件状态为不可用
64:                     btnReg_Click(sender, e);    //打开注册窗口
65:                 }
66:                 else
67:                 {
68:                     Application.Exit();
69:                 }
70:             }
71:
72:         }
73:
74:         private void btnClose_Click(object sender, EventArgs e)
75:         {
76:             Application.Exit();
77:         }
78:
79:         private void btnReg_Click(object sender, EventArgs e)
80:         {
81:             FormRegister frmRegister = new FormRegister();
82:             frmRegister.ShowDialog();
83:         }
84:     }
85: }


注册窗体:





1: using System;
2: using System.Collections.Generic;
3: using System.ComponentModel;
4: using System.Data;
5: using System.Drawing;
6: using System.Linq;
7: using System.Text;
8: using System.Windows.Forms;
9: using Microsoft.Win32;
10:
11: namespace SoftRegister
12: {
13:     public partial class FormRegister : Form
14:     {
15:         public FormRegister()
16:         {
17:             InitializeComponent();
18:         }
19:
20:         public static bool state = true;  //软件是否为可用状态
21:         SoftReg softReg = new SoftReg();
22:
23:         private void btnReg_Click(object sender, EventArgs e)
24:         {
25:             try
26:             {
27:                 if (txtLicence.Text == softReg.GetRNum())
28:                 {
29:                     MessageBox.Show("注册成功!重启软件后生效!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
30:                     RegistryKey retkey = Registry.CurrentUser.OpenSubKey("Software", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI").CreateSubKey(txtLicence.Text);
31:                     retkey.SetValue("UserName", "Rsoft");
32:                     this.Close();
33:                 }
34:                 else
35:                 {
36:                     MessageBox.Show("注册码错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
37:                     txtLicence.SelectAll();
38:                 }
39:             }
40:             catch (Exception ex)
41:             {
42:                 throw new Exception(ex.Message);
43:             }
44:         }
45:
46:         private void btnClose_Click(object sender, EventArgs e)
47:         {
48:             if (state == true)
49:             {
50:                 this.Close();
51:             }
52:             else
53:             {
54:                 Application.Exit();
55:             }
56:         }
57:
58:         private void FormRegister_Load(object sender, EventArgs e)
59:         {
60:             this.txtHardware.Text = softReg.GetMNum();
61:         }
62:     }
63: }


(二)注册机的实现:
SoftReg类:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Management;
6:
7: namespace SoftwarePassport
8: {
9:     class SoftReg
10:     {
11:         public int[] intCode = new int[127];    //存储密钥
12:         public char[] charCode = new char[25];  //存储ASCII码
13:         public int[] intNumber = new int[25];   //存储ASCII码值
14:
15:         //初始化密钥
16:         public void SetIntCode()
17:         {
18:             for (int i = 1; i < intCode.Length; i++)
19:             {
20:                 intCode[i] = i % 9;
21:             }
22:         }
23:
24:         ///<summary>
25:         /// 生成注册码
26:         ///</summary>
27:         ///<returns></returns>
28:         public string GetRNum(string strMNum)
29:         {
30:             SetIntCode();
31:
32:             for (int i = 1; i < charCode.Length; i++)   //存储机器码
33:             {
34:                 charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));
35:             }
36:             for (int j = 1; j < intNumber.Length; j++)  //改变ASCII码值
37:             {
38:                 intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
39:             }
40:             string strAsciiName = "";   //注册码
41:             for (int k = 1; k < intNumber.Length; k++)  //生成注册码
42:             {
43:
44:                 if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]
45:                     <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122))  //判断如果在0-9、A-Z、a-z之间
46:                 {
47:                     strAsciiName += Convert.ToChar(intNumber[k]).ToString();
48:                 }
49:                 else if (intNumber[k] > 122)  //判断如果大于z
50:                 {
51:                     strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();
52:                 }
53:                 else
54:                 {
55:                     strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();
56:                 }
57:             }
58:             return strAsciiName;
59:         }
60:     }
61: }


主窗体:




1: using System;
2: using System.Collections.Generic;
3: using System.ComponentModel;
4: using System.Data;
5: using System.Drawing;
6: using System.Linq;
7: using System.Text;
8: using System.Windows.Forms;
9:
10: namespace SoftwarePassport
11: {
12:     public partial class FormMain : Form
13:     {
14:         public FormMain()
15:         {
16:             InitializeComponent();
17:         }
18:
19:         SoftReg softReg = new SoftReg();
20:
21:         private void btnCreate_Click(object sender, EventArgs e)
22:         {
23:             try
24:             {
25:                 string strHardware = this.txtHardware.Text;
26:                 string strLicence = softReg.GetRNum(strHardware);
27:                 this.txtLicence.Text = strLicence;
28:             }
29:             catch (System.Exception ex)
30:             {
31:                 MessageBox.Show("输入的机器码格式错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
32:             }
33:         }
34:
35:         private void btnExit_Click(object sender, EventArgs e)
36:         {
37:             Application.Exit();
38:         }
39:     }
40: }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: