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

C#—软件注册与注册机

2015-06-30 18:26 651 查看

(一)软件的实现:

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: }

转自:/article/4929907.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: