• winform程序如何通过操作注册表来实现限制使用次数


    今天闲来无事,看了下以前自己写的程序,然后就找着了这个操作注册表的程序..依然还是 主要是自己记录方便以后看

    先来看下效果吧..

    下面贴出主要代码:

     /// <summary>
            /// 在注册表中创建一个键 并指定值
            /// </summary>
            private void SetRegeditValue()
            {
                //判断是否存在指定节点
                //如果存在 不影响  继续判断节点下的键值
                //如果不存在 则建立一个新的节点
                if (!IsThisNode("useTime"))
                {
                    RegistryKey key = Registry.LocalMachine;//获取根节点
                    key.CreateSubKey("SOFTWARE\\useTime");//创建指定节点
                }
                //判断是否存在指定键
                //如果不存在 则创建一个键
                //如果存在 则进行else里代码
                if (!IsThisKey("nowCount", "useTime"))
                {
                    RegistryKey key = Registry.LocalMachine;//获取注册表根节点
                    RegistryKey software = key.OpenSubKey("software\\useTime", true);//获取soft下的创建的节点
                    software.CreateSubKey("nowCount");//创建指定键
                    software.SetValue("nowCount", 14);//给指定键赋值
                    MessageBox.Show("感谢您的使用试用版本,还剩14次使用机会", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Main m = new Main();
                    m.Show();
                }
                //如果存在指定键
                else
                {
                    RegistryKey Key = Registry.LocalMachine;//获取注册表根节点
                    RegistryKey Zane = Key.OpenSubKey("software\\useTime", true);//获取soft下指定节点下的键
                    int count = 0;
                    try
                    {
                        count = Convert.ToInt32(Zane.GetValue("nowCount"));//取得键值
                    }
                    catch (Exception ex)
                    {
                        count = 0;
                    }
                    //大于0 每次成功运行后次数减1
                    if (count>0)
                    {
                        Zane.SetValue("nowCount", count - 1);
                        MessageBox.Show("感谢您的使用试用版本,还剩" + (count - 1) + "次使用机会", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Main m = new Main();
                        m.Show();
                    }
                    //等于0已经不能使用 必须注册 
                    //注册我也没啥经验 就随便用了个CPU的ID编码来实现了
                    else if (count == 0)
                    {
                        MessageBox.Show("试用次数已经用完,请购买注册码继续使用", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Register r = new Register();//注册窗体 
                        r.Show();
                    }
                    else {
                        Main m = new Main();
                        m.Show();
                    }
                    Zane.Close();
                }
            }
            /// <summary>
            /// 判断注册表中是否有指定节点
            /// </summary>
            /// <param name="nodeName"></param>
            /// <returns></returns>
            private bool IsThisNode(string nodeName)
            {
                string[] subKeyName;
                RegistryKey top = Registry.LocalMachine;//得到注册表根目录下的所有节点
                RegistryKey softwatre = top.OpenSubKey("SOFTWARE");//取得soft节点
                subKeyName = softwatre.GetSubKeyNames();//取得soft节点下的所有节点名称
                foreach (string keyNames in subKeyName)//开始与指定的键对比 
                {
                    if (keyNames == nodeName)
                    {
                        top.Close();
                        return true;
                    }
                }
                top.Close();
                return false;
            }
    
            /// <summary>
            /// 判断是否有健存在
            /// </summary>
            /// <param name="keyName"></param>
            /// <returns></returns>
            private bool IsThisKey(string keyName, string nodeName)
            {
                string[] subKeyName;
                RegistryKey top = Registry.LocalMachine;//得到注册表根目录下的所有节点
                RegistryKey softwatre = top.OpenSubKey("SOFTWARE\\" + nodeName);//取得soft节点下的指定节点
                subKeyName = softwatre.GetSubKeyNames();//取得soft节点下的所有键名称
                foreach (string nodeNames in subKeyName)//开始与指定的键对比 
                {
                    if (nodeNames == keyName)
                    {
                        top.Close();
                        return true;
                    }
                }
                top.Close();
                return false;
            }

    在窗口的load事件或者构造函数里调用SetRegeditValue 方面 在注册表中就会生成一个节点

     我们操作的注册表都在HK_lOCAL_MACHINE中,至于其他的都是怎么用的,我也不太清楚,以后在探究 现在主要就是说这个。。 打开选中的注册表项,你就能找到你创建的节点.. 如图:

    然后就是你自己定义了 往注册表里存什么数据, 这样就能实现限制使用次数的功能..至于注册,那里就不说了,因为我写的这东西其实对于懂的人来说,改下注册表就什么都不管用了,,最好的限制使用应该就是用加密狗之类的工具..网上是这么说的,没用过. 

  • 相关阅读:
    java JDBC DAO ORM Domain
    《硅谷钢铁侠-- 埃隆·马斯克的冒险人生》
    在启动MYSQL时出现问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”
    使用IntelliJ IDEA开发java web
    [django]用日期来查询datetime类型字段
    2020/5/31
    图解排序算法(三)之堆排序
    图解排序算法(二)之希尔排序
    图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
    Oracle约束(Constraint)详解
  • 原文地址:https://www.cnblogs.com/sulei4471/p/2474606.html
Copyright © 2020-2023  润新知