www.pudn.com > datelock.zip > DATELOCK.CPP


#include  
#include "resource.h" 
int  Delay; 
char szAppName[]="时间锁"; 
char inifile[MAX_PATH]; 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam); 
SYSTEMTIME systime,oldtime; 
char  oldfilepath[MAX_PATH],oldfilename[MAX_PATH]; 
char  filepath[MAX_PATH],filename[MAX_PATH]; 
HINSTANCE hInst; 
int GetOldpath(void) 
{ 
char ctemp[MAX_PATH],*p; 
 lstrcpy(ctemp,GetCommandLine()); 
 p=strlen(ctemp)-1+ctemp; 
 while(p!=ctemp) 
  { 
   if(*p=='\"') 
   *p=0; 
   else  
	if(*p=='\\') 
	{*p=0; 
	 lstrcpy(oldfilepath,ctemp+1); 
	 lstrcpy(oldfilename,p+1); 
	 return 0; 
	} 
   p--; 
 } 
return 1; 
} 
 
int RunFile(HWND hwnd,LPSTR lpCmdLine,int iShow) 
{ 
char ctemp[MAX_PATH]; 
 
memcpy(&oldtime,&systime,sizeof SYSTEMTIME); 
GetOldpath(); 
wsprintf(inifile,"%s\\DateLock.ini\0",oldfilepath); 
systime.wYear=GetPrivateProfileInt(szAppName,"Year",0,inifile); 
systime.wMonth=GetPrivateProfileInt(szAppName,"Month",0,inifile); 
systime.wDay=GetPrivateProfileInt(szAppName,"Day",0,inifile); 
Delay=GetPrivateProfileInt(szAppName,"Delay",0,inifile); 
GetPrivateProfileString(szAppName,"FilePath","NULL",filepath,MAX_PATH,inifile); 
GetPrivateProfileString(szAppName,"FileName","NULL",filename,MAX_PATH,inifile); 
 
if(systime.wYear<1980||systime.wMonth==0||systime.wDay==0 
   ||systime.wMonth>12||systime.wDay>31||stricmp("NULL",filepath)==0 
   ||stricmp("NULL",filename)==0) 
{MessageBoxEx(hwnd,"读取 DateLock.ini 文件错误\n请先用参数 /SetupDateLock 设置选项!",NULL,MB_OK|MB_ICONSTOP,0x804); 
 return 1; 
} 
SetCurrentDirectory(filepath); 
int i=SetLocalTime(&systime); 
wsprintf(ctemp,"\"%s\\%s\" %s",filepath,filename,lpCmdLine); 
SetTimer(hwnd,1,Delay*100,NULL); 
static STARTUPINFO StartInfo; 
static PROCESS_INFORMATION ProcInfo; 
StartInfo.cb=sizeof(STARTUPINFO);  
CreateProcess(NULL,ctemp,NULL,NULL,FALSE, 
		0,NULL,NULL,&StartInfo,&ProcInfo); 
return 0; 
} 
 
int CALLBACK DlgProc(HWND hDlg,UINT iMsg,WPARAM wParam,LPARAM lParam) 
{ 
char ctemp[MAX_PATH],ctemp1[MAX_PATH],*p; 
UINT i; 
switch(iMsg) 
{ case WM_INITDIALOG: 
       SetDlgItemInt(hDlg,IDC_EDIT1,systime.wYear,TRUE); 
	   SetDlgItemInt(hDlg,IDC_EDIT2,systime.wMonth,TRUE); 
	   SetDlgItemInt(hDlg,IDC_EDIT3,systime.wDay,TRUE); 
	   SetDlgItemInt(hDlg,IDC_EDIT4,40,TRUE); 
       CheckDlgButton(hDlg,IDC_CHECK1,BST_CHECKED); 
       break;  
  case WM_COMMAND: 
    switch(wParam)  
	{case IDOK: 
      systime.wYear=GetDlgItemInt(hDlg,IDC_EDIT1,NULL,FALSE); 
      systime.wMonth=GetDlgItemInt(hDlg,IDC_EDIT2,NULL,FALSE); 
	  systime.wDay=GetDlgItemInt(hDlg,IDC_EDIT3,NULL,FALSE); 
	   
      if(systime.wMonth==0||systime.wDay==0 
		  ||systime.wYear<1900||systime.wMonth>12||systime.wDay>31||systime.wDay==0) 
	  { 
	   MessageBoxEx(hDlg,"日期输入错误!",NULL,MB_OK|MB_ICONSTOP,0x804); 
	   break; 
	  } 
	  i=1; 
	  GetDlgItemText(hDlg,IDC_EDIT5,ctemp,MAX_PATH); 
      if(ctemp[0]!=0) 
	  { 
        p=ctemp+lstrlen(ctemp)-1; 
		while(p!=ctemp) 
		{ 
		 if(*p=='\\') 
		 {*p=0; 
		  lstrcpy(filepath,ctemp); 
          lstrcpy(filename,p+1); 
		  i=0; 
		  break; 
		 } 
		 p--; 
		} 
	  } 
	  if(!i) 
	    i=GetOldpath(); 
	  if(i) 
	  { 
       MessageBoxEx(hDlg,"路径输入错误!",NULL,MB_OK|MB_ICONSTOP,0x804); 
	   break; 
	  } 
	  Delay=GetDlgItemInt(hDlg,IDC_EDIT4,NULL,FALSE); 
	   if(IsDlgButtonChecked(hDlg,IDC_CHECK1)) 
	   { 
	    wsprintf(ctemp,"%s\\%s",filepath,filename); 
	    wsprintf(ctemp1,"%s\\DateLock_%s",filepath,filename); 
	    if(MoveFile(ctemp,ctemp1)==0) 
		{ 
	     MessageBoxEx(hDlg,"文件更名错误!请退出目标程序!",NULL,MB_OK|MB_ICONSTOP,0X804); 
	     break; 
		} 
	    wsprintf(ctemp1,"%s\\%s",oldfilepath,oldfilename); 
	    if(CopyFile(ctemp1,ctemp,TRUE)==0) 
		{ 
	 	 MessageBoxEx(hDlg,"复制文件错误!",NULL,MB_OK|MB_ICONSTOP,0X804); 
	     break; 
		} 
	    wsprintf(inifile,"%s\\DateLock.INI",filepath); 
	    wsprintf(ctemp1,"原程序被更名为DateLock_%s!\r\n你可自由使用了!",filename); 
	    i=1; 
	   } 
	   else  
	   { 
	    wsprintf(inifile,"%s\\datelock.ini",oldfilepath); 
	    wsprintf(ctemp1,"现在运行本程序就行了!"); 
	    i=0; 
	   } 
	   wsprintf(ctemp,"%d",systime.wYear); 
       WritePrivateProfileString(szAppName,"Year",ctemp,inifile); 
	   wsprintf(ctemp,"%d",systime.wMonth); 
       WritePrivateProfileString(szAppName,"Month",ctemp,inifile); 
	   wsprintf(ctemp,"%d",systime.wDay); 
       WritePrivateProfileString(szAppName,"Day",ctemp,inifile); 
       wsprintf(ctemp,"%d",Delay); 
       WritePrivateProfileString(szAppName,"Delay",ctemp,inifile);  
       WritePrivateProfileString(szAppName,"FilePath",filepath,inifile); 
	   if(IsDlgButtonChecked(hDlg,IDC_CHECK1)) 
	     wsprintf(ctemp,"DateLock_%s",filename); 
	   else wsprintf(ctemp,"%s",filename); 
	   WritePrivateProfileString(szAppName,"FileName",ctemp,inifile); 
	   MessageBoxEx(hDlg,ctemp1,"成功",MB_OK|MB_ICONINFORMATION,0X804); 
     case IDCANCEL: 
       EndDialog(hDlg,0); 
	   break; 
     case IDC_BUTTON1: 
       OPENFILENAME ofn; 
	   memset(&ofn,0,sizeof ofn); 
	   wsprintf(ctemp,"*.EXE"); 
       ofn.lStructSize=sizeof OPENFILENAME; 
	   ofn.hInstance=hInst; 
	   ofn.lpstrFilter="可执行文件(*.EXE)"; 
	   ofn.lpstrFile=ctemp; 
	   ofn.nMaxFile=MAX_PATH; 
	   ofn.lpstrTitle="选择运行的程序"; 
	   ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY 
		   |OFN_PATHMUSTEXIST|OFN_READONLY; 
	   i=GetOpenFileName(&ofn); 
	   if(i)SetDlgItemText(hDlg,IDC_EDIT5,ctemp); 
       break; 
	 case IDBUTTON2: 
       MessageBoxEx(hDlg, 
		   "这是一个令你的软件不再过期的软件\n\n" 
		   "1.程序运行日期是指运行程序时的日期\n\n" 
		   "2.延时指运行程序后等待多长时间恢复\n" 
		   "原来的日期。(10=1秒)\n\n" 
		   "3.程序路径指欲运行程序所在的位置。\n\n" 
		   "4.当选择更名并替代原程序时, 原程序\n" 
		   "将被更名为'DateLock_'+原程序名。本\n" 
		   "程序将复制一分代替原程序。" 
		   , 
		   "帮助", 
           MB_OK,0x804); 
	   break; 
	} 
  return TRUE; 
} 
return FALSE; 
} 
 
WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int iShow) 
{    
 WNDCLASSEX wndclass; 
 HWND hwnd; 
 MSG msg; 
 HBITMAP hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)); 
 HBRUSH hBrush=CreatePatternBrush(hBitmap); 
 wndclass.cbSize        = sizeof (wndclass) ; 
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ; 
     wndclass.lpfnWndProc   = WndProc ; 
     wndclass.cbClsExtra    = 0 ; 
     wndclass.cbWndExtra    = 0 ; 
     wndclass.hInstance     = hInst; 
     wndclass.hIcon         = LoadIcon (hInst,MAKEINTRESOURCE(IDI_ICON1)); 
     wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW) ; 
     wndclass.hbrBackground = hBrush;//(HBRUSH) GetStockObject (LTGRAY_BRUSH) ; 
     wndclass.lpszMenuName  = NULL ; 
     wndclass.lpszClassName = szAppName; 
     wndclass.hIconSm       = LoadIcon (hInst,MAKEINTRESOURCE(IDI_ICON1)) ; 
     RegisterClassEx (&wndclass) ; 
	 GetLocalTime(&systime); 
	 hwnd = CreateWindow (szAppName,szAppName,    
                    WS_POPUPWINDOW|WS_VISIBLE|DS_CENTER, 
                    300,200,247,113,            
                    NULL,NULL,hInst,NULL) ;		            
	 ::hInst=hInst; 
     if(stricmp(lpCmdLine,"/SetupDateLock")==0) 
	 { 
      DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgProc); 
      return 0; 
	 } 
     else 
     if(RunFile(hwnd,lpCmdLine,iShow))return 0; 
     while (GetMessage (&msg, NULL, 0, 0)) 
	 { 
       TranslateMessage (&msg) ; 
       DispatchMessage (&msg) ; 
	 } 
    return 0; 
} 
 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) 
{ 
 
	switch(iMsg) 
	{ 
	 case WM_TIMER: 
     case WM_DESTROY: 
      SetLocalTime(&oldtime); 
	  PostQuitMessage(0); 
	  break; 
	} 
return DefWindowProc(hwnd,iMsg,wParam,lParam); 
}