如何在VC中实现软件的注册机制

现在网上下载的软件大部分都需要注册后才能使用其全部的功能,也就是说当前大部分软件都是建立了注册机制的,对于一个刚进入软件行业的程序员来说一定非常想了解其中的注册机制是怎样实现的。其实用VC开发软件,是可以很方便地加入注册机制的。

要实现软件注册功能,首先需要知道实现注册机制要涉及到的几个问题:1、如何加入注册检测,判断软件是否注册;2、如何生成注册码,如何保证一个用户名只生成与之唯一对应的注册码;3、在软件不注册情况下,如何限制软件功能的局限性;4、对已经负费使用用户而言,不应造成使用不便。

首先,应该有一个生成注册码的算法,以下是我简单的一个生成15为注册码的算法:

//该函数返回一个CSTRING类型的15位注册码,入口参数为用户名

CString GetRegPasswd(CString &DirName)
{
//将用户名换算成15位注册码
long Num1,Num2,Num3;
char sn[16]={0};
CString p;
int i,len;
Num1=0;
Num2=0;
Num3=0;
len=int(strlen(DirName));
if(len!=0)
{
for( i=1;i<=len;i++)
{
//第一步算法
Num1=(long(Num1+(int(DirName[i-1])*i*i)*(i*sqrt(DirName[i-1])+1)))%100000;
//第二步算法
Num2=(Num2*i+(long(pow((int)DirName[i-1],2)*i)))%100000;
//第三步算法
Num3=(Num2+(long)sqrt(Num1))%100000;
}
//以下把三个算法结果分别生成5个字符,共有15个
for(i=0;i<5;i++)
sn[i]=(int)(Num1+31+i*i*i)%128;
for(i=5;i<10;i++)
sn[i]=(int)(Num2+31+i*i*i)%128;
for(i=10;i<15;i++)
sn[i]=(int)(Num3+31+i*i*i)%128;
sn[15]=0;
//以下循环把所有生成的字符转换为0---9,A---Z,a----z
for(i=0;i<15;i++)
{
while((sn[i]<'0' || sn[i]>'9') && (sn[i]<'A' || sn[i]>'Z') &&(sn[i]<'a' || sn[i]>'z') )
{
sn[i]=(sn[i]+31+7*i)%128;
}
}
//赋值给一个CSTRING变量,用做函数返回值
p.Format("%s",sn);
}
return p;
}
//检查软件是否注册的函数
BOOL GetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;
CString str;
str.LoadString(IDS_REG_KEY);// IDS_REG_KEY为在注册表中的子目录字符串
if (RegCreateKey(HKEY_CURRENT_USER, str, &hKey) != ERROR_SUCCESS) return false;
DWORD cbA;
cbA=sizeof(int);
if( RegQueryValueEx(hKey, "SzMima",NULL,NULL, &i,&cbA) != ERROR_SUCCESS)
return false;
BYTE j=i;
if(j==0)//0代表软件已经注册,可以正常使用
{
RegCloseKey(hKey);
return true;
}
else
{
RegCloseKey(hKey);
return false;
}
return false;
};
//设置软件已经注册标志的函数
BOOL SetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;
CString str;
str.LoadString(IDS_REG_KEY);// IDS_REG_KEY为在注册表中的子目录字符串
if (RegCreateKey(HKEY_CURRENT_USER, str, &hKey) != ERROR_SUCCESS) return false;
BYTE j=0;//0代表已经注册
if(RegSetValueEx(hKey, "SzMima", 0, REG_BINARY, &j,4) != ERROR_SUCCESS)
{
AfxMessageBox("设置注册表数据失败!");
return FALSE;
}
return false;
};

时间: 2024-08-31 18:30:50

如何在VC中实现软件的注册机制的相关文章

如何在VC++中使用API直接打印

(说明:)这一段代码,用以演示<如何在VC++中使用API直接打印>.并且该段代码可以直接嵌入各种工程中,有实际使用的价值. (用途:)在Visual C++中,应用程序通常是使用CView中提供的打印功能,在OnPrint()或OnDraw()中向打印机输出.但是对于对话框中的数据,或基于对话框的程序,打印成了一件繁琐的工作. 该段代码向用户提供了PrintListCtrl()函数,用于打印用户在对话框或FormView中的CListCtrl(控件必须是Report View 形式的)控件中

怎样在VC++中访问和修改注册表

Windows95/98/Me的注册表包含了Windows95/98/Me的系统配置.PC机的硬件配置.Win32应用程序和用户的其他设置信息.注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目. 在实际编程工作中,我们遇到了如何在Visual C++中对Windows95/98/Me注册表整个树状结构信息进行访问和修改的问题,如查询和修改注册表中用户姓名和公司名称的有关信息.通过编程实践,我们实现了在Visu

如何在VC中显示动态的GIF

如果是使用VB,也许这个话题是多余的,因为VB有一个图象控件可以非常容易地实现各种格式的图象显示功能,然而对于VC却没有一个象样的控件可以达到这种效果,怎么办?经过一段日子的研究,发现只需要实现两步工作,就可以在VC中实现如同VB中一样的gif动态效果. 本文将介绍的两部分是IPicture接口的使用和gif的储存格式,好象一听到储存格式,读者就不想再看下去了!其实不然,这里只须用到其最基本的一部分,请读者耐心地往下看. 一.IPicture接口 IPicture接口是一个com类,其成员函数可

请问如何在VC中实现,浏览文件夹时打开的是刚才已经浏览过的文件夹路径?

问题描述 就是说,我刚才已经打开过一个文件夹路径,后来还要在浏览这个文件夹,可是一点又回到了最原始的路径,怎样才能保存我刚才浏览过的文件夹的路径那??本人是名新手,对VC的一些东西还不是很了解,望大家帮忙解决~!~!谢谢大家了~!~! 解决方案 解决方案二:把存文件夹路径的变量设为static变量

如何在vc++中旋转位图

网上有很多关于位图旋转的资料,但是讲得很清楚的不多(我没有仔细查找).于是我也写了一个,希望能给向我这样的初学者一点帮助. 第一步,你必须知道位图即BMP格式的文件的结构. 位图(bmp)文件由以下几个部分组成: 1.BITMAPFILEHEADER,它的定义如下: typedef struct tagBITMAPFILEHEADER {  WORD bfType;  //必须为'BM' DWORD bfSize; //文件大小 WORD bfReserved1; //必须为0 WORD bfR

asp.net实现QQ在线聊天程序中javascript的窗口注册机制

前段时间给公司做了一个类似QQ的Asp.net在线聊天程序,与服务器之间的通讯是通过前台页面的定时 器到服务器上的临时消息目录中取得相关信息来实现的,消息结构XML,为了避免对服务器造成太大的压 力就只开了一个定时器,也没敢多开,程序完成后由于测试条件限制只在少的可怜的几台机器上测试了一 下,效果还算可以吧,目前能实现发送文字,图片,文件查看历史记录,网络硬盘等基本功能,由于聊天 窗口是嵌套在公司主框架里面的所以得实现聊天主窗体和聊天窗体以及一些其他窗体之间指针的引用问题 ,避免某个聊天窗口被打

分享如何在VB中调用VC编写的DLL_vb

一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL:一种是VC生成ActiveX控件(.ocx),在VB中插入:还有一种是在VC中生成ActiveX Automation服务器,在VB中调用.相对而言,第一种方法对VC编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法. 先说说VC++的编程.首先在VC++中生成Win32 DLL工程.在这个工程中添加几个函数供VB用户调用.一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一

中文观点句 软件-这个软件老师给的如何在eclipse中运行,有点大,大神帮帮忙

问题描述 这个软件老师给的如何在eclipse中运行,有点大,大神帮帮忙 http://pan.baidu.com/s/1zeDjd

activexobject不兼容-如何在Javascript中判断客户端是否安装插件或OCX是否注册,并且能兼容不同的浏览器

问题描述 如何在Javascript中判断客户端是否安装插件或OCX是否注册,并且能兼容不同的浏览器 我想实现的功能是:用户访问网站时,判断客户端机器上是否有安装指定程序或某个OCX是否注册,如果没有则自动弹出下载包提示安装(下载包安装时会自动安装几个插件和程序,并注册一些OCX),那么只要判断其中某个程序有没有安装或某个OCX有没有注册就行了. 我是试了几种方法都不行: 1.判断注册后的OCX文件是否存在: var fso = new ActiveXObject("Scripting.File