winform 注册码+注册表保存
我所使用的注册码方法只是基于本地的CPUID与硬盘的编码并进行.开发人员使用SoftReg 类根据唯一机器码生成唯一注册码,发给客户,客户注册之后就可以用,注册未成功时会在本地注册表生成一个使用次数,注册成功则生成一个指示注册成功的值或者直接保存注册码在本地注册表中也是可以的
private int[] intCode = new int[127]; // 存储密钥private char[] charCode = new char[25]; // 存储机器码字private int[] intNumber = new int[25]; // 存机器码的Ascii值/// <summary>/// 获取CPU/// </summary>/// <returns>CPU字符串</returns>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;}/// <summary>/// 获取卷轴字符串/// </summary>/// <returns>卷轴字符串</returns>public string GetDiskVolumeSerialNumber(){ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");disk.Get();return disk.GetPropertyValue("VolumeSerialNumber").ToString();}/// <summary>/// 得到机器码/// </summary>/// <returns>机器码</returns>public string getMNum(){string strNum = getCPU() + GetDiskVolumeSerialNumber(); //获得24位Cpu和硬盘序列号string strMNum = strNum.Substring(0, 24); //从生成的字符串中取出前24个字符做为机器码return strMNum;}/// <summary>/// 获得注册码/// </summary>/// <returns>注册码字符串</returns>public string getRNum(){SetIntCode();string strMNum = getMNum();for (int i = 1; i < charCode.Length; i++) //存储机器码{charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));}for (int j = 1; j < intNumber.Length; j++) //改变ASCII码值{intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];}string strAsciiName = ""; //注册码for (int k = 1; k < intNumber.Length; k++) //生成注册码{if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]<= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122)) //判断如果在0-9、A-Z、a-z之间{strAsciiName += Convert.ToChar(intNumber[k]).ToString();}else if (intNumber[k] > 122) //判断如果大于z{strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();}else{strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();}}return strAsciiName;}/// <summary>/// 给数组赋值小于10的数/// </summary>public void SetIntCode(){for (int i = 1; i < intCode.Length; i++){intCode[i] = i % 9;}}
这些函数就可以生产机器码和注册码
根据客户发回的机器码则生成注册码了
private void MainForm_Load(object sender, EventArgs e){try{//判断软件是否注册RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI");foreach (string strRNum in retkey.GetSubKeyNames()){if (strRNum == getRNum()){this.label3.Text = "此软件已注册!";this.btnReg.Enabled = false;return;}}this.label3.Text = "此软件尚未注册!";this.btnReg.Enabled = true;MessageBox.Show("您现在使用的是试用版,可以免费试用30次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);Int32 tLong; //已使用次数try{tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);MessageBox.Show("您已经使用了" + tLong + "次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch{MessageBox.Show("欢迎使用本软件!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0, RegistryValueKind.DWord);}//判断是否可以继续试用tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);if (tLong < 10){int tTimes = tLong + 1;Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", tTimes);}else{MessageBox.Show("试用次数已到!请注册!", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);}}catch (Exception ex){MessageBox.Show("请以管理员身份运行!");this.Close();}txtMachineNum.Text = getMNum();}
注册码效验程序
```csharp```csharpprivate void btnReg_Click(object sender, EventArgs e){try{if (txtRegNum.Text == getRNum()){MessageBox.Show("注册成功!重启软件后生效!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);RegistryKey retkey = Registry.CurrentUser.OpenSubKey("Software", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI").CreateSubKey(getRNum());retkey.SetValue("UserName", "Rsoft");this.Close();}else{MessageBox.Show("注册码错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}catch (Exception ex){throw new Exception(ex.Message);}}
winform 注册码+注册表保存相关推荐
- MFC SDI 中 通过注册表保存当前窗体的 显示状态位置
在 框架类响应 WM_CLOSE消息的时候添加如下代码 HKEY key; //用于接收注册表项句柄 WINDOWPLACEMENT info; //获得窗体位置状态信息 Ge ...
- oracle不能写入注册表,保存注册表时提示无法创建值,写入注册表时出错怎么办?...
如何解决保存注册表提示"无法创建值,写入注册表时出错"的问题?电脑当中的注册表编辑器有着十分重要的作用,但是最近却有用户表示遇到了编辑注册表后保存却提示"无法创建值,写入 ...
- 用注册表保存数据——DOS应用简介
简介 注册表最开始是出现在Windows 3.x,是用来为OLE保存数据的.那时Windows和其应用程序的设置值大多都保存在各不相同的.INI文件中.例如我们最为熟悉的System.ini和Win. ...
- winform 操作注册表(RegistryHelper)调试时,出现“对注册表项访问被拒绝”异常
项目场景: 最近一个项目需要用到注册表.在用代码创建注册表子项时,抛出"对注册表项...访问被拒绝"的异常. 问题描述: 调用RegistryHelper.CreateSubKey ...
- wince注册表结构
2019独角兽企业重金招聘Python工程师标准>>> 与桌面Windows一样,Windows CE也使用注册表(Registry)来保存应用程序.驱动程序和用户的设定以及其他一些 ...
- WINCE基于hive注册表的实现
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- mscoreei.dll没有被指定在windows上运行_windows注册表详解
与INI文件不同的是: 1.注册表采用了 二进制形式登录数据: 2.注册表支持子键,各级子关键字都有自己的"键值": 3.注册表中的键值项可以包含可执行代码,而不是简单的字串: 4 ...
- linux修改windows注册表,妙招:让修改的注册表立即生效的几种方法
建站学院(LieHuo.Net)Windows文档Windows操作系统是全球最广泛,使用者最多的软件,熟悉Windows软件成了电脑操作者必不可少的功课,注册表作为"Windows的神经系 ...
- 蜂窝注册表和永久存储
WindowsCE有两种注册表,一种是基于RAM的,一种是基于蜂窝的注册表:WindowsCE会默认使用前者.如果是使用前者,PB在编译的时候会先把common.reg.platform.reg.pr ...
最新文章
- Mysql sql优化(一)
- Java加密与解密笔记(三) 非对称加密
- 【译】SQL Server索引进阶第八篇:唯一索引
- Apache Ivy
- 添加dubbo xsd的支持
- vue截取一个字符串_vue 截取字符串
- 【K210】【MaixPy】一、Maix Dock入门之FPIOA和GPIO
- go语言 gosched
- IEEE 研究类型 小木虫
- 让axios读取本地模拟数据报错404: Error: Request failed with status code 404
- 邮件管理数据库设计--MySQL
- PADS2007教程(一)——原理图封装
- 计算机语言栏不能添加,电脑电脑输入法添加不了怎么办
- 前端50个精美登录注册模板
- 【Alpha】事后诸葛亮
- kaggle:NBA球员投篮数据分析与可视化(一)
- 微影Q8pro投影仪和哈趣H1投影仪相比谁好用 一表看清
- 怎样判断一个整数是不是回文数?
- 出门问问又出音箱了,除了造型大变样,「工作地点」开始从家里转移到你的裤兜里
- SQL中delete和drop的区别