C#實(shí)現(xiàn)注冊(cè)碼注冊(cè)機(jī)制效果詳解
更新時(shí)間:2023年01月03日 10:57:00 作者:芝麻粒兒
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)注冊(cè)碼注冊(cè)機(jī)制效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
實(shí)踐過(guò)程
效果
代碼
public partial class frmMain : Form { public frmMain() { InitializeComponent(); } SoftReg softreg = new SoftReg();//實(shí)例化公共類(lèi)對(duì)象 private void frmMain_Load(object sender, EventArgs e) { RegistryKey retkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("software", true).CreateSubKey("mrwxk").CreateSubKey("mrwxk.ini"); foreach (string strRNum in retkey.GetSubKeyNames())//判斷是否注冊(cè) { if (strRNum == softreg.getRNum()) { this.Text = "主窗體(已注冊(cè))"; button1.Enabled = false; return; } } this.Text = "主窗體(未注冊(cè))"; button1.Enabled = true; MessageBox.Show("您現(xiàn)在使用的是試用版,該軟件可以免費(fèi)試用30次!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); Int32 tLong; try { tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\tryTimes", "UseTimes", 0); MessageBox.Show("感謝您已使用了" + tLong + "次", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\tryTimes", "UseTimes", 0, RegistryValueKind.DWord); MessageBox.Show("歡迎新用戶使用本軟件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\tryTimes", "UseTimes", 0); if (tLong < 30) { int Times = tLong + 1; Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\tryTimes", "UseTimes", Times); } else { MessageBox.Show("試用次數(shù)已到", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); Application.Exit(); } } private void button1_Click(object sender, EventArgs e) { frmRegister frmregister = new frmRegister(); frmregister.Show(); this.Hide(); } private void frmMain_FormClosed(object sender, FormClosedEventArgs e) { Application.Exit(); } }
public partial class frmRegister : Form { public frmRegister() { InitializeComponent(); } SoftReg softreg = new SoftReg();//實(shí)例化公共類(lèi)對(duì)象 private void frmRegister_Load(object sender, EventArgs e) { textBox1.Text = softreg.getMNum(); } private void button1_Click(object sender, EventArgs e) { if (textBox2.Text == "") { MessageBox.Show("注冊(cè)碼輸入不能為空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { if (textBox2.Text.Equals(softreg.getRNum())) { RegistryKey retkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("software", true).CreateSubKey("mrwxk").CreateSubKey("mrwxk.ini").CreateSubKey(textBox2.Text); retkey.SetValue("UserName", "mrsoft"); MessageBox.Show("注冊(cè)成功,程序需要重新加載!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Hide(); frmMain frmmain = new frmMain(); frmmain.Show(); } else { MessageBox.Show("注冊(cè)碼輸入錯(cuò)誤!", "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void button2_Click(object sender, EventArgs e) { this.Hide(); frmMain frmmain = new frmMain(); frmmain.Show(); } }
public partial class frmRMachine : Form { public frmRMachine() { InitializeComponent(); } SoftReg softreg = new SoftReg();//實(shí)例化公共類(lèi)對(duì)象 private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("機(jī)器碼輸入不能為空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { textBox2.Text = softreg.getRNum(); } } private void button2_Click(object sender, EventArgs e) { this.Close(); } }
public class SoftReg { // 取得設(shè)備硬盤(pán)的卷標(biāo)號(hào) public string GetDiskVolumeSerialNumber() { ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\""); disk.Get(); return disk.GetPropertyValue("VolumeSerialNumber").ToString(); } //獲得CPU的序列號(hào) public string getCpu() { string strCpu = null; ManagementClass myCpu = new ManagementClass("win32_Processor"); ManagementObjectCollection myCpuConnection = myCpu.GetInstances(); foreach (ManagementObject myObject in myCpuConnection) { strCpu = myObject.Properties["Processorid"].Value.ToString(); break; } return strCpu; } //生成機(jī)器碼 public string getMNum() { string strNum = getCpu() + GetDiskVolumeSerialNumber();//獲得24位Cpu和硬盤(pán)序列號(hào) string strMNum = strNum.Substring(0, 24);//從生成的字符串中取出前24個(gè)字符做為機(jī)器碼 return strMNum; } public int[] intCode = new int[127];//存儲(chǔ)密鑰 public int[] intNumber = new int[25];//存機(jī)器碼的Ascii值 public char[] Charcode = new char[25];//存儲(chǔ)機(jī)器碼字 public void setIntCode()//給數(shù)組賦值小于10的數(shù) { for (int i = 1; i < intCode.Length; i++) { intCode[i] = i % 9; } } //生成注冊(cè)碼 public string getRNum() { setIntCode();//初始化127位數(shù)組 for (int i = 1; i < Charcode.Length; i++)//把機(jī)器碼存入數(shù)組中 { Charcode[i] = Convert.ToChar(this.getMNum().Substring(i - 1, 1)); } for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一個(gè)整數(shù)組中。 { intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]); } string strAsciiName = "";//用于存儲(chǔ)注冊(cè)碼 for (int j = 1; j < intNumber.Length; j++) { if (intNumber[j] >= 48 && intNumber[j] <= 57)//判斷字符ASCII值是否0-9之間 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判斷字符ASCII值是否A-Z之間 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判斷字符ASCII值是否a-z之間 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else//判斷字符ASCII值不在以上范圍內(nèi) { if (intNumber[j] > 122)//判斷字符ASCII值是否大于z { strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString(); } else { strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString(); } } } return strAsciiName; } }
以上就是C#實(shí)現(xiàn)注冊(cè)碼注冊(cè)機(jī)制效果詳解的詳細(xì)內(nèi)容,更多關(guān)于C#注冊(cè)碼注冊(cè)機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
相關(guān)文章
C#中DataTable和List互轉(zhuǎn)的示例代碼
很多場(chǎng)景下,我們需要將List轉(zhuǎn)換成為DataTable,本文主要介紹了C#中DataTable和List互轉(zhuǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04C#實(shí)現(xiàn)的SN快速輸入工具實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的SN快速輸入工具,以實(shí)例的形式詳細(xì)講述了C#實(shí)現(xiàn)序列號(hào)快速輸入的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11詳解StackExchange.Redis通用封裝類(lèi)分享
這篇文章主要介紹了詳解StackExchange.Redis通用封裝類(lèi)分享 ,詳細(xì)的介紹了StackExchange.Redis通用封裝,具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12C#使用FluentScheduler實(shí)現(xiàn)觸發(fā)定時(shí)任務(wù)
FluentScheduler是.Net平臺(tái)下的一個(gè)自動(dòng)任務(wù)調(diào)度組件,這篇文章主要為大家詳細(xì)介紹了C#如何使用FluentScheduler實(shí)現(xiàn)觸發(fā)定時(shí)任務(wù),感興趣的小伙伴可以了解下2023-12-12C#實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下2024-01-01