文档章节

C#(WinForm)实现软件注册

深圳大道
 深圳大道
发布于 2016/12/29 15:39
字数 682
阅读 62
收藏 0

SoftReg类:

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Management;
 
 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(0,24);    //截取前24位作为机器码
             return strMNum;
         }
 
         public int[] intCode = new int[127];    //存储密钥
         public char[] charCode = new char[25];  //存储ASCII码
         public int[] intNumber = new int[25];   //存储ASCII码值
 
         //初始化密钥
         public void SetIntCode() 
         {
             for (int i = 1; i < intCode.Length; i++)
             {
                 intCode[i] = i % 9;
             }
         }
 
   ///<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;
         }
     }
 }


注册窗体:

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 frmRegisterForm : Form
     {
         public frmRegisterForm()
         {
             InitializeComponent();
         }
         public static bool state = true;  //软件是否为可用状态
         SoftReg softReg = new SoftReg();
         private void btnClose_Click(object sender, EventArgs e)
         {
             if (state == true)
             {
                 this.Close();
             }
             else 
             {
                 Application.Exit();
             }
         }
 
         private void btnReg_Click(object sender, EventArgs e)
         {
             try
             {
                 if (txtRNum.Text == softReg.GetRNum())
                 {
                     MessageBox.Show("注册成功!重启软件后生效!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                     RegistryKey retkey = Registry.CurrentUser.OpenSubKey("Software", true).CreateSubKey("wxf").CreateSubKey("wxf.INI").CreateSubKey(txtRNum.Text);
                     retkey.SetValue("UserName", "Rsoft");
                     this.Close();
                 }
                 else
                 {
                     MessageBox.Show("注册码错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                     txtRNum.SelectAll();
                 }
             }
             catch (Exception ex)
             {
                 throw new Exception(ex.Message);
             }
         }
 
         private void frmRegisterForm_Load(object sender, EventArgs e)
         {
             this.txtMNum.Text = 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 frmMainForm : Form
    {
        public frmMainForm()
        {
            InitializeComponent();
        }
        SoftReg softReg = new SoftReg();
        private void btnClose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btnReg_Click(object sender, EventArgs e)
        {
            frmRegisterForm frmRegister = new frmRegisterForm();
            frmRegister.ShowDialog();
        }

        ///<summary>
        /// 窗体加载
        ///</summary>
        ///<param name="sender"></param>
        ///<param name="e"></param>
        private void frmMainForm_Load(object sender, EventArgs e)
        {
            //判断软件是否注册
            RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey("wxf").CreateSubKey("wxf.INI");
            foreach (string strRNum in retkey.GetSubKeyNames())
            {
                if (strRNum == softReg.GetRNum())
                {
                    this.lblRegInfo.Text = "此软件已注册!";
                    this.btnReg.Enabled = false;
                    return;
                }
            }
            this.Text = "此软件尚未注册!";
            this.btnReg.Enabled = true;
            MessageBox.Show("您现在使用的是试用版,可以免费试用30次!","信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
            Int32 tLong;
            try
            {
                 tLong= (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Angel", "UseTimes", 0);
                MessageBox.Show("您已经使用了" + tLong + "次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch 
            {
                MessageBox.Show("欢迎使用本软件!","信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
                Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Angel","UseTimes",0,RegistryValueKind.DWord);
            }
            tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Angel", "UseTimes", 0);
            if (tLong < 30)
            {
                int tTimes = tLong + 1;
                Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Angel", "UseTimes", tTimes);
            }
            else 
            {
                DialogResult result = MessageBox.Show("试用次数已到!您是否需要注册?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (result == DialogResult.Yes)
                {
                    frmRegisterForm.state = false;
                    btnReg_Click(sender, e);
                }
                else 
                {
                    Application.Exit();
                }
            }
        }
    }
}

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/8745460

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
postbird/Postbird_License

更多内容:http://www.ptbird.cn/winform-authority-license.html 前述: 这是一则比较蛋疼的前述。 我在http://sxw.ptbird.cn 个税计算的授权版本中提到过,我自己搞了一个C# winform的授权验...

postbird
2016/11/15
0
0
百度地图桌面程序源码,CatchPacket网络抓包软件

百度地图桌面程序源码,CatchPacket网络抓包软件 Extjs c# asp.net 兼职 qq:2294508843 百度地图桌面程序源码 功能介绍: 1.根据ip定位地理位置信息,ip网段,isp提供商,ip地理位置 2.根据i...

acer
2014/11/03
264
1
谈谈软件的开发及成长历程

每个人身上,都有着独一无二的经历,也有着不一样的成长历程。回顾一下,从大学时期参加校网络中心从事开发工作,到目前在社会上的风雨兼程,也走过十多年的开发路程了,黄金岁月,青春年华,...

walb呀
2017/12/04
0
0
SmartInvoke

SmartInvoke是一国产开源API,实现当前所有主流平台之间方便的互调。 目前版本: 项目名称 项目原理 项目用途 项目比较 Java与Flex版 在swt中加载flash的swf文件,通过flash的ActiveX接口与J...

xiaoxiao130130
2009/12/30
3.2K
0
十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)

前言 本文主要介绍我开发的几款软件产品,大概介绍一下功能。可以让读者了解本人的开发能力,所擅长的方面。有相关开发需求可以联系作者。 本人开发软件多年,从事的行业也多种多样;自然接触...

源之缘
2018/12/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Less导入选项

Less 提供了CSS @import CSS规则的几个扩展,以提供更多的灵活性来处理外部文件。 语法: @import (keyword) "filename"; 以下是导入指令的相关详情: reference,使用较少的文件但不输出。 ...

凌兮洛
7分钟前
5
0
Docker下实现MySQL主从(读、写分离)同步配置

docker下实现两个(或多个)mysql容器的主、从数据库同步配置,首先要明白docker容器的相互通信关系,默认是使用的bridge模式: 也就是说,通过docker run命令创建docker容器是每个容器都有自己...

源哥L
17分钟前
10
0
一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
36分钟前
15
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
今天
23
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
今天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部