363上位机VC MFC利用注册表限制软件使用次数
利用注册表限制软件使用次数
功能展示
经常遇到在第一次使用优秀的软件时,会有软件使用次数的限制,我们当前例程也实现了这一功能,效果如图。软件将使用次数的设置开放出来给用户设置,实际中可以软件后台运行。设置次数后,点击设置按钮,会将设置的数值写入到注册表中,软件运行几次后,次数大于设置的值,软件会提示信息并强制退出;
要点提示
例程通过RegCreateKey()创建或打开注册表,通过RegSetValueEx()设置注册表键值项,或项的数据。通过函数RegQueryValueEx()取得值项的数据,通过atoi()函数转换为整形进行使用次数的判断;
强行退出程序可用函数exit(0); exit()函数用于关闭所有文件,终止正在执行的进程
exit(0)表示正常退出,
exit(x)(x不为0)都表示异常退出,这个x是返回给操作系统(包括UNIX,Linux,和MS DOS)的,以供其他程序使用。
实现功能
1.新建基于对话框的应用程序
2.添加变量CString m_sKeyPath;并初始化
m_sKeyPath="Software\\gkbc8_com";
HKEY Key;
if(RegOpenKey(HKEY_CURRENT_USER,m_sKeyPath,&Key)==ERROR_FILE_NOT_FOUND)
{
::RegCreateKey(HKEY_CURRENT_USER,m_sKeyPath,&Key);
::RegSetValueEx(Key,"TryTime",0,REG_SZ,(unsigned char*)"9",2);//在注册表中记录已试用的次数
::RegCloseKey(Key);
MessageBox("您可以使用9次");
}
else //已经存在注册信息
{
CString sTryTime;
int nTryTime;
LPBYTE Data=new BYTE[80];
DWORD TYPE=REG_SZ;
DWORD cbData=80;
//取出已记载的数量
::RegQueryValueEx(Key,"TryTime",0,&TYPE,Data,&cbData);
sTryTime.Format("%s",Data);
delete []Data;
nTryTime=atoi(sTryTime);
if(nTryTime<1)
{
MessageBox("您的最大试用次数已过,只有注册后才允许继续使用!", "系统提示",MB_OK|MB_ICONSTOP);
exit(0);//强制退出程序
}
//<>使用次数减一再保存到注册表
nTryTime--;
nTryTime=nTryTime<0?0:nTryTime;//保证不小于0
sTryTime.Format("%d",nTryTime);
::RegSetValueEx(Key,"TryTime",0,REG_SZ,(unsigned char*)sTryTime.GetBuffer(0),2);
::RegCloseKey(Key);
CString temp;
temp.Format("您还可以使用%d次",nTryTime);
MessageBox(temp);
3.添加编辑框IDC_EDIT1,及按钮<设置软件使用次数>关联按钮点击函数
void CGkbc8Dlg::OnSet()
{
CString str;
GetDlgItemText(IDC_EDIT1,str);
int nTryTime=atoi(str);
if(nTryTime<=0 || nTryTime>=10)
{
MessageBox("试用次数1-9次");
return;
}
HKEY Key;
::RegCreateKey(HKEY_CURRENT_USER,m_sKeyPath,&Key);
::RegSetValueEx(Key,"TryTime",0,REG_SZ,(unsigned char*)str.GetBuffer(0),str.GetLength());
::RegCloseKey(Key);
MessageBox("设置成功","系统提示",MB_OK);
}
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|