您的位置:首页 > 其它

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

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

先来看下效果吧..



下面贴出主要代码:

/// <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中,至于其他的都是怎么用的,我也不太清楚,以后在探究 现在主要就是说这个。。 打开选中的注册表项,你就能找到你创建的节点.. 如图:



然后就是你自己定义了 往注册表里存什么数据, 这样就能实现限制使用次数的功能..至于注册,那里就不说了,因为我写的这东西其实对于懂的人来说,改下注册表就什么都不管用了,,最好的限制使用应该就是用加密狗之类的工具..网上是这么说的,没用过.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: