C#:注册机的实现
先看界面




软件的实现:
SoftReg类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management; //需要引用System.Management.dll namespace SoftRegister
{
class SoftReg
{
///<summary>
/// 获取硬盘卷标号
///</summary>
///<returns></returns>
public string GetDiskVolumeSerialNumber()
{
ManagementClass mc = new ManagementClass("win32_NetworkAdapterConfiguration");
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
return disk.GetPropertyValue("VolumeSerialNumber").ToString();
} ///<summary>
/// 获取CPU序列号
///</summary>
///<returns></returns>
public string GetCpu()
{
string strCpu = null;
ManagementClass myCpu = new ManagementClass("win32_Processor");
ManagementObjectCollection myCpuCollection = myCpu.GetInstances();
foreach (ManagementObject myObject in myCpuCollection)
{
strCpu = myObject.Properties["Processorid"].Value.ToString();
}
return strCpu;
} ///<summary>
/// 生成机器码
///</summary>
///<returns></returns>
public string GetMNum()
{
string strNum = GetCpu() + GetDiskVolumeSerialNumber();
string strMNum = strNum.Substring(, ); //截取前24位作为机器码
return strMNum;
} public int[] intCode = new int[]; //存储密钥
public char[] charCode = new char[]; //存储ASCII码
public int[] intNumber = new int[]; //存储ASCII码值 //初始化密钥
public void SetIntCode()
{
for (int i = ; i < intCode.Length; i++)
{
intCode[i] = i % ;
}
} ///<summary>
/// 生成注册码
///</summary>
///<returns></returns>
public string GetRNum()
{
SetIntCode();
string strMNum = GetMNum();
for (int i = ; i < charCode.Length; i++) //存储机器码
{
charCode[i] = Convert.ToChar(strMNum.Substring(i - , ));
}
for (int j = ; j < intNumber.Length; j++) //改变ASCII码值
{
intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
}
string strAsciiName = ""; //注册码
for (int k = ; k < intNumber.Length; k++) //生成注册码
{ if ((intNumber[k] >= && intNumber[k] <= ) || (intNumber[k] >= && intNumber[k]
<= ) || (intNumber[k] >= && intNumber[k] <= )) //判断如果在0-9、A-Z、a-z之间
{
strAsciiName += Convert.ToChar(intNumber[k]).ToString();
}
else if (intNumber[k] > ) //判断如果大于z
{
strAsciiName += Convert.ToChar(intNumber[k] - ).ToString();
}
else
{
strAsciiName += Convert.ToChar(intNumber[k] - ).ToString();
}
}
return strAsciiName;
}
}
}
调用方法:
SoftReg softReg = new SoftReg(); //实例化一个
string aa= softReg.GetMNum();
主窗体:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32; namespace SoftRegister
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
SoftReg softReg = new SoftReg(); private void FormMain_Load(object sender, EventArgs e)
{
//判断软件是否注册
RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI");
foreach (string strRNum in retkey.GetSubKeyNames())
{
if (strRNum == softReg.GetRNum())
{
this.labRegInfo.Text = "此软件已注册!";
this.btnReg.Enabled = false;
return;
}
}
this.labRegInfo.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", );
MessageBox.Show("您已经使用了" + tLong + "次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("欢迎使用本软件!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", , RegistryValueKind.DWord);
} //判断是否可以继续试用
tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", );
if (tLong < )
{
int tTimes = tLong + ;
Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", tTimes);
}
else
{
DialogResult result = MessageBox.Show("试用次数已到!您是否需要注册?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (result == DialogResult.Yes)
{
FormRegister.state = false; //设置软件状态为不可用
btnReg_Click(sender, e); //打开注册窗口
}
else
{
Application.Exit();
}
} } private void btnClose_Click(object sender, EventArgs e)
{
Application.Exit();
} private void btnReg_Click(object sender, EventArgs e)
{
FormRegister frmRegister = new FormRegister();
frmRegister.ShowDialog();
}
}
}
注册机的实现:
SoftReg类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management; namespace SoftwarePassport
{
class SoftReg
{
public int[] intCode = new int[]; //存储密钥
public char[] charCode = new char[]; //存储ASCII码
public int[] intNumber = new int[]; //存储ASCII码值 //初始化密钥
public void SetIntCode()
{
for (int i = ; i < intCode.Length; i++)
{
intCode[i] = i % ;
}
} ///<summary>
/// 生成注册码
///</summary>
///<returns></returns>
public string GetRNum(string strMNum)
{
SetIntCode(); for (int i = ; i < charCode.Length; i++) //存储机器码
{
charCode[i] = Convert.ToChar(strMNum.Substring(i - , ));
}
for (int j = ; j < intNumber.Length; j++) //改变ASCII码值
{
intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
}
string strAsciiName = ""; //注册码
for (int k = ; k < intNumber.Length; k++) //生成注册码
{ if ((intNumber[k] >= && intNumber[k] <= ) || (intNumber[k] >= && intNumber[k]
<= ) || (intNumber[k] >= && intNumber[k] <= )) //判断如果在0-9、A-Z、a-z之间
{
strAsciiName += Convert.ToChar(intNumber[k]).ToString();
}
else if (intNumber[k] > ) //判断如果大于z
{
strAsciiName += Convert.ToChar(intNumber[k] - ).ToString();
}
else
{
strAsciiName += Convert.ToChar(intNumber[k] - ).ToString();
}
}
return strAsciiName;
}
}
}
主窗体:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace SoftwarePassport
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
} SoftReg softReg = new SoftReg(); private void btnCreate_Click(object sender, EventArgs e)
{
try
{
string strHardware = this.txtHardware.Text;
string strLicence = softReg.GetRNum(strHardware);
this.txtLicence.Text = strLicence;
}
catch (System.Exception ex)
{
MessageBox.Show("输入的机器码格式错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
} private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
C#:注册机的实现的更多相关文章
- PostSharp 4.0注册机实现过程
PostSharp是基于.NET平台设计的比较强调易学易用的AOP框架. 什么是AOP? http://wayfarer.cnblogs.com/articles/241024.html 新版的已失效 ...
- Webstorm 10 for mac osx 注册机,序列号,kegen
小菜最近get到mac体验机会,早就耳闻mac非常适合做开发,于是迫不及待的安装各种开发工具,不知不觉,轮到前端开发神器webstorm了,看了一下官网的价格,心拔凉拔凉的. 果断搜索注册机,搜到的结 ...
- Flash Builder 4.7 注册机完美激活方法
Flash Builder 4.7 破解注册方法目前较为通用的三种方法: 第一种:三步修改配置文件方法,这种有开发者反应这种方法在升级和创建纯 AS 项目时会存在问题,但我懒的去试这种方法的主要原因是 ...
- 转:Autodesk 2017软件下载+注册机+破解方法(持续更新)
转载自http://blog.sina.com.cn/s/blog_710225790102w03e.html Autodesk 2017安装步骤: 安装Autodesk 2017相关软件 使用序列号 ...
- UltraEdit 注册机使用说明
请断开网络连接(或直接拔掉网线)后执行: 安装完成后,点击弹出界面的“注册”按钮,然后直接点击“激活”,此时UltraEdit检测到网络断开则弹出界面提示“脱机激活”,此时启动注册机,并将UltraE ...
- 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机
转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...
- HTTP抓包神器HTTP Analyzer V7 Build7.5.4汉化+注册机
原版安装包.汉化文件.注册机下载:http://pan.baidu.com/s/1bMv1Si 密码:cqq1 一.安装:下载并安装英文原版 下载页面:http://www.ieinspector. ...
- ERWin 7.2下载安装及注册机
ERWin 7.2下载安装及注册机 ERWin 7.2 下载地址: ftp://ftp.ca.com/CAproducts/erwin/ServicePacks/AFEDM72-b1644.exe ...
- C#:注册机的实现【提供源代码下载】
代码下载 C#软件注册机 软件运行结果 参考文章 http://www.cnblogs.com/hanzhaoxin/archive/2013/01/04/2844191.html
- Resharper注册机实现以及源代码
一直用Resharper,每次找注册机也麻烦,就想怎么才能自己能做个注册机,把它原理给搞懂了,不就不用找了.今天早上起来研究了下Resharper注册机,网上找到一位大神之前做Resharper注册机 ...
随机推荐
- 2018.06.29 NOIP模拟 1807(简单递推)
1807 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出一个由数字('0'-'9')构成的字符串.我们说一个子序列是好的,如果他的每一位都是 1.8.0.7 ,并且这四个数字按照 ...
- 从窗口句柄得到菜单句柄(从HWND得到HMENU)
1. 如果HWND是主窗口,可以使用API: GetMenu(...) 得到属于主窗口的句柄,原型如下: HMENU GetMenu(HWND hWnd); 在MFC中原型如下: CMenu* Get ...
- 配置使用sourcemap调试vue源码爬坑
环境: Google Chrome V72.0.3626.109 vue-dev V 2.6.10 爬坑的乐趣就不说了(我恨啊),以下说一下出坑要点 1. 在vue-dev的package.json ...
- SoC FPGA JTAG电路设计 要点
JTAG协议制定了一种边界扫描的规范,边界扫描架构提供了有效的测试布局紧凑的PCB板上元件的能力.边界扫描可以在不使用物理测试探针的情况下测试引脚连接,并在器件正常工作的过程中捕获运行数据. SoC ...
- 给ubuntu系统的root设置密码:
首先输入:sudo passwd root 然后输入当前用户的密码,例如xiaomeige这个用户的密码为xiaomeige 然后输入希望给root账户设置的密码,例如密码也为root
- H3C交换机流量镜像
今天需要对交换机进行本地流量镜像,在此记录: 交换机:H3C S5120 配置本地端口镜像时,用户首先要创建一个本地镜像组,然后为本地镜像组配置源端口和目的端口. 表1-1 配置本地端口镜像 操作 命 ...
- AndroidPn推送测试
服务器搭建好了之后,往客户端推送.按照里面自带的一个client,可以分别在模拟器和真机上分别测试,不过由于这个框架真的不是很完善,会遇到各种问题. (1) 其中还遇到了一个安卓模拟器的问题,启动模拟 ...
- JS和C#访问遇到QueryInterface调用出错
在原来的WinForm里,我们只要在窗体类的头部添加属性[System.Runtime.InteropServices.ComVisibleAttribute(true)],然后 webBrowser ...
- window2012如何查看进程中PID所对应的IIS应用程序池
1.打开任务管理器,找到任意IIS进程,右击选择打开文件位置,获取到文件路径,例如:C:\Windows\System32\inetsrv 2.使用管理员打开cmd命令行工具,然后切换到刚才获取到文件 ...
- AspNetCore Mvc 自定义中间件认证
AspNetCore Mvc 自定义中间件认证 实现控制器访问验证和拦截. 1.注册政策. 例如: services.AddAuthorization(options => { options. ...