- 论坛徽章:
- 0
|
一个程序过期了。拿到了它的源代码。
请问将注册表xzYear,xzMonth,xzDay三个值改为何值时,软件不会再提示已经过期?
bool CCenterServerManage::getIntTime(CTime * pTime)
{
if (!AfxSocketInit())
{
AfxMessageBox("联网失败");
return FALSE;
}
CString strServer("");
CSocket sockClient;
sockClient.Create(); //创建socket
strServer="time.ien.it";
sockClient.Connect((LPCTSTR)strServer, 37); // strServer:时间服务器网址; 37:端口号
DWORD dwTime = 0; //用来存放服务器传来的标准时间数据
unsigned char nTime[8]; //临时接收数据
memset(nTime, 0, sizeof(nTime));
sockClient.Receive(nTime, sizeof(nTime)); //接收服务器发送来得4个字节的数据
sockClient.Close(); //关闭socket
dwTime += nTime[0] << 24; //整合数据
dwTime += nTime[1] << 16;
dwTime += nTime[2] << 8;
dwTime += nTime[3];
if(0 == dwTime) return FALSE;
COleDateTime t00( 1900, 1, 1, 0, 0, 0 ); // 1900.1.1 00:00:00
COleDateTime t70( 1970, 1, 1, 0, 0, 0 ); // 1970.1.1 00:00:00
COleDateTimeSpan ts70to00 = t70 - t00;
DWORD dwSpan = (DWORD)ts70to00.GetTotalSeconds();
ASSERT( dwSpan == 2208988800L );
//把时间变为基于1970年的,便于用CTime处理
dwTime -= dwSpan;
//考虑网络延迟因素
//dwTime += dwDely;
//构造当前时间的CTime对象
CTime timeNow = (CTime)dwTime;
*pTime = timeNow;
return true;
}
bool CCenterServerManage::isTimeOver()
{
int buff[5];//读取值的存储区
CString s_yearBuff;//存储年
CString s_monthBuff;//存储月
CString s_dayBuff;//存储日
int Read=0;
LPBYTE readYear=new BYTE[5];
LPBYTE readMonth=new BYTE[5];
LPBYTE readDay=new BYTE[10];
DWORD w_Lenth=5;
//time_t ct;
//time( &ct) ;/// 当前日期
CTime t2(1990, 1, 1, 0, 0, 0);
getIntTime(&t2);
int a=t2.GetYear();
int b=t2.GetMonth();
int c=t2.GetDay();
buff[0]=a;
buff[1]=b;
buff[2]=c;
s_yearBuff.Format("%d",buff[0]);
s_monthBuff.Format("%d",buff[1]);
s_dayBuff.Format("%d",buff[2]);
DWORD s=REG_SZ/*REG_BINARY*/;
HKEY sub;
CString skey="SOFTWARE\\xz";
LONG return0=RegOpenKeyEx(HKEY_LOCAL_MACHINE,skey,0,KEY_ALL_ACCESS,&sub);
LONG return1=::RegQueryValueEx(sub,"xzYear",NULL,&s,/*(LPBYTE)*/readYear,(LPDWORD)&w_Lenth/*(LPDWORD)sBuff.GetLength()*/);
::RegQueryValueEx(sub,"xzMonth",NULL,&s,readMonth,(LPDWORD)&w_Lenth);
::RegQueryValueEx(sub,"xzDay",NULL,&s,readDay,(LPDWORD)&w_Lenth);
if(return0!=ERROR_SUCCESS)//如果注册表中没有字段值,写入
{
LONG l_Error=0;
LONG l_Temp;
l_Temp=::RegCreateKey(HKEY_LOCAL_MACHINE,skey,&sub);
l_Error+=l_Temp;
l_Temp=RegSetValueEx(sub,"xzYear",NULL,REG_SZ,(BYTE*)s_yearBuff.GetBuffer(0),s_yearBuff.GetLength());
l_Error+=l_Temp;
l_Temp=RegSetValueEx(sub,"xzMonth",NULL,REG_SZ,(BYTE*)s_monthBuff.GetBuffer(0),s_monthBuff.GetLength());
l_Error+=l_Temp;
l_Temp=RegSetValueEx(sub,"xzDay",NULL,REG_SZ,(BYTE*)s_dayBuff.GetBuffer(0),s_dayBuff.GetLength());
l_Error+=l_Temp;
if(l_Error!=0)
{
AfxMessageBox("软件注册错误,软件不可运行!");
delete[] readYear;
delete[] readMonth;
delete[] readDay;
::RegCloseKey(sub);
return false;
}
return true;
}
else //如果注册表中有值,读取
{
int n_Year;
int n_Month;
int n_Day;
//::RegQueryValueEx(sub,"xzMonth",NULL,&s,readMonth/*(BYTE *)sBuff.GetBuffer(0)*/,(LPDWORD)&w_Lenth/*(LPDWORD)sBuff.GetLength()*/);
CString s_Year;
CString s_Month;
CString s_Day;
CString ss;
// 转换成int
s_Year.Format("%s",readYear);
n_Year=atoi(s_Year);//cstring转为int
s_Month.Format("%s",readMonth);
n_Month=atoi(s_Month);//cstring转为int
s_Day.Format("%s",readDay);
n_Day=atoi(s_Day);//cstring转为int
int a;//记录天数
a=(buff[1]-n_Month)*30+(buff[2]-n_Day);
if(a>=26)
{
AfxMessageBox(" 软件已经到期!");
delete[] readYear;
delete[] readMonth;
delete[] readDay;
::RegCloseKey(sub);
return false;
}
}
delete[] readYear;
delete[] readMonth;
delete[] readDay;
::RegCloseKey(sub);
return true;
} |
|