在线等:vc 6.0写入注册表内容,怎么从新启动就没有了
类别:VC阿里妈妈帮你实现网络赚钱梦
操作注册表代码
BOOL CShijianApp::InitInstance()
{
AfxEnableControlContainer();
//
TestTime tt;
CTime CurTime = CTime::GetCurrentTime();
CTime t = CurTime;
DWORD ShiYong=43200;
//检查软件是否第一次运行,如果是则设定限制时间
//我们这儿设定软件在当前时间两分分钟后禁用
if (!tt.IsInstalled())
{
//CTime t = CurTime CTimeSpan(0,0,2,0);
tt.SetLimitTime(t.GetYear(),t.GetMonth(),t.GetDay(),
t.GetHour(),t.GetMinute(),t.GetSecond());
tt.SetLimitJianGe(ShiYong);
AfxMessageBox("第一次使用本软件",MB_OK);
}
else
{
//判断时间间隔是否小于等于0
DWORD JianGe1=0;
tt.GetLimitJianGe(JianGe1);
//判断是否已过使用时间
if(JianGe1 <=0){
::AfxMessageBox("试用版已到期,请联系购买一个正版使用",MB_OK);
}
else{
//本次试用时间计算
::AfxMessageBox("第n次试用",MB_OK);
CTime lm;
tt.GetLimitTime(lm);
DWORD HuaFei=0;
long ShengXia=0;
if(lm >t){
::AfxMessageBox("向前更改时间",MB_OK);
ShengXia=0;
}
else{
HuaFei=(t-lm).GetTotalMinutes();
ShengXia=JianGe1-HuaFei;
}
//判断是否过期
if(ShengXia <=0)
{
ShengXia=0;
}
//写入注册剩余时间
tt.SetLimitJianGe(ShengXia);
//写入下次使用时刻
tt.SetLimitTime(t.GetYear(),t.GetMonth(),t.GetDay(),
t.GetHour(),t.GetMinute(),t.GetSecond());
//
}
}
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls();// Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic();// Call this when linking to MFC statically
#endif
CShijianDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application "s message pump.
return FALSE;
}
回答:
没有看到写注册表的代码.如果写完之后可以在注册表中看到而重启后没有的话可以考虑有没有还原卡等东西了.回答:
写注册表的代码呢?API中提供了这么几个函数:
RegOpenKeyEx,RegQueryValueEx,RegSetKeySecurity,RegSetValueEx等函数
回答:
没看到楼主的代码里有操作注册表的地方回答:
// TestTime.cpp: implementation of the TestTime class.//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "shijian.h"
#include "TestTime.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
TestTime::TestTime()
{
}
TestTime::~TestTime()
{
}
BOOL TestTime::IsInstalled()
{
BOOL bInstalled = FALSE;
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
if (ret != ERROR_SUCCESS) //打开注册表失败
return FALSE;
//从注册表中读入特征值
DWORD dwVal,dwType,dwLen;
ret = RegQueryValueEx(m_hKey, "Installed", NULL,
&dwType,(unsigned char*)&dwVal,&dwLen);
if (ret != ERROR_SUCCESS)//读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//检查读到的特征值是否为1,如果是,则表明软件以前已运行过
bInstalled = (dwVal == 1);
//关闭注册表
RegCloseKey(m_hKey);
return bInstalled;
}
BOOL TestTime::GetLimitTime(CTime& t)
{
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
if (ret != ERROR_SUCCESS) //打开注册表失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//从注册表中读入试用期限数据
DWORD nYear,nMonth,nDay,nHour,nMinute,nSecond;
DWORD dwType;
DWORD dwLen;
ret = RegQueryValueEx (m_hKey, "Year", NULL, //读取年份
&dwType,(unsigned char*)&nYear,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegQueryValueEx (m_hKey, "Month", NULL, //读取月份
&dwType,(unsigned char*)&nMonth,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegQueryValueEx (m_hKey, "Day", NULL, //读取天
&dwType,(unsigned char*)&nDay,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegQueryValueEx (m_hKey, "Hour", NULL, //读取小时
&dwType,(unsigned char*)&nHour,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegQueryValueEx (m_hKey, "Minute", NULL, //读取分钟
&dwType,(unsigned char*)&nMinute,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegQueryValueEx (m_hKey, "Second", NULL, //读取秒
&dwType,(unsigned char*)&nSecond,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//关闭注册表
RegCloseKey(m_hKey);
t = CTime(nYear,nMonth,nDay,nHour,nMinute,nSecond);
return TRUE;
}
BOOL TestTime::SetLimitTime(DWORD nYear,DWORD nMonth,DWORD nDay,
DWORD nHour,DWORD nMinute,DWORD nSecond)
{
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
if (ret != ERROR_SUCCESS) //打开注册表失败
return FALSE;
//向注册表中写入试用期限数据
ret = RegSetValueEx (m_hKey, "Year", NULL, //写入年
REG_DWORD,(CONST BYTE*)&nYear,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegSetValueEx (m_hKey, "Month", NULL, //写入月份
REG_DWORD,(CONST BYTE*)&nMonth,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegSetValueEx (m_hKey, "Day", NULL, //写入天
REG_DWORD,(CONST BYTE*)&nDay,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegSetValueEx (m_hKey, "Hour", NULL, //写入小时
REG_DWORD,(CONST BYTE*)&nHour,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegSetValueEx (m_hKey, "Minute", NULL, //读取年份数据
REG_DWORD,(CONST BYTE*)&nMinute,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
ret = RegSetValueEx (m_hKey, "Second", NULL, //写入秒
REG_DWORD,(CONST BYTE*)&nSecond,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//写入特征数据
DWORD dwVal = 1;
ret = RegSetValueEx (m_hKey, "Installed", NULL, //写入特征值
REG_DWORD,(CONST BYTE*)&dwVal,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//关闭注册表
RegCloseKey(m_hKey);
return TRUE;
}
BOOL TestTime::SetLimitJianGe(DWORD nJianGe)
{
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
if (ret != ERROR_SUCCESS) //打开注册表失败
return FALSE;
//向注册表中写入试用期限数据
ret = RegSetValueEx (m_hKey, "JianGe", NULL, //写入剩下时间
REG_DWORD,(CONST BYTE*)&nJianGe,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//写入特征数据
DWORD dwVal = 1;
ret = RegSetValueEx (m_hKey, "Installed", NULL, //写入特征值
REG_DWORD,(CONST BYTE*)&dwVal,sizeof(DWORD));
if (ret != ERROR_SUCCESS) //写入数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//关闭注册表
RegCloseKey(m_hKey);
return TRUE;
}
BOOL TestTime::GetLimitJianGe(DWORD &nJianGe)
{
DWORD dwDisposition;
HKEY m_hKey;
//打开注册表
LONG ret = RegCreateKeyEx (HKEY_LOCAL_MACHINE, "SOFTWARE\\TimeLimit", 0L, NULL,
REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, &dwDisposition);
if (ret != ERROR_SUCCESS) //打开注册表失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//从注册表中读入试用期限数据
DWORD dwType;
DWORD dwLen;
ret = RegQueryValueEx (m_hKey, "JianGe", NULL, //读取间隔
&dwType,(unsigned char*)&nJianGe,&dwLen);
if (ret != ERROR_SUCCESS) //读取数据失败
{
RegCloseKey(m_hKey);
return FALSE;
}
//关闭注册表
RegCloseKey(m_hKey);
return TRUE;
}
