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

(一)软件的实现:

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: }
主窗体:
image
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: }

注册窗体:

image

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: }
主窗体:
image
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: }

 

posted @ 2015-07-15 18:03  Yusarin  阅读(1161)  评论(0编辑  收藏  举报