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í)踐過程
效果

代碼
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
SoftReg softreg = new SoftReg();//實(shí)例化公共類對(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í)例化公共類對(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í)例化公共類對(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è)備硬盤的卷標(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和硬盤序列號(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),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
C#實(shí)現(xiàn)的SN快速輸入工具實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的SN快速輸入工具,以實(shí)例的形式詳細(xì)講述了C#實(shí)現(xiàn)序列號(hào)快速輸入的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
C#使用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-12
C#實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)一個(gè)Word保護(hù)性模板文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下2024-01-01

