time.c
Upload User: sales84
Upload Date: 2007-01-11
Package Size: 864k
Code Size: 11k
Development Platform:

Visual C++

  1. #include <userdlg.h>
  2. #include "sharewareluncher.h"
  3. #include "time1.h"
  4. #include "tab.h"
  5. #include "resource.h"
  6. extern HINSTANCE hInst;
  7. HBITMAP hbmHHour[3],hbmLHour[10],hbmHMin[6],hbmLMin[10];
  8. HBITMAP hbmHSec[6],hbmLSec[10],hbmClockBkg;
  9. extern HBITMAP hbmMain,hbmClock;
  10. extern HWND hMainWnd;
  11. extern DWORD dwThreadId;
  12. extern BOOL bMined,bQuit;
  13. extern int nTimerNum;
  14. extern TIMERINFO ti[10];
  15. extern BOOL bClockYes;
  16. BOOL bCanGo=TRUE;
  17. extern int nAlarmEveryHour;
  18. BOOL bKnocked=FALSE;
  19. int nDlgflag=-99;
  20. extern char szerr[1100];
  21. extern BOOL bNoShowDel,btRuning;
  22. extern BOOL bHelp;
  23. const char szver[400]="   版本:1.2x0dx0a    本软件是一个程序发射器兼闹钟程式并可虚拟软驱
  24. ,可使你的共享软件永不过期。只要你在程序设置中设定好共享软件的启动日期(在其有效期内),则本程式
  25. 启动该共享软件时会先把系统日期改为该有效日期,20秒后自动改回当前日期。为防系统日期混乱
  26. 导致共享软件启动失败,请勿在20秒内启动两个或以上的共享软件。x0dx0a    本软件自带整点";
  27. const char szver1[200]="报时功能,必须有声卡支持。如到时声卡正在使用中则无法报时。(PCI声卡除外)。
  28. x0dx0a    为NT系统安全性起见,本软件的关机及修改系统日期功能在Windows NT中不起作用。x0dx0a";
  29. const char szver2[100]="谢谢你对本软件的支持。x0dx0a作者联系地址:常熟市花园浜路2#308x0dx0a邮编:215500
  30. x0dx0a电话:0520-2798715x0dx0a";
  31. const char szver3[40]="E-Mail:SZ7301@public1.sz.js.cn";
  32. void InitTimeBmp(HWND hWnd)
  33. {
  34. HDC hDC,hMainDC,hMemDC,hBkgDC,hMaskDC,hTempDC;
  35.    HBITMAP hbmMask;
  36.    int i,j;
  37.    hDC=GetDC(hWnd);
  38.    hMemDC=CreateCompatibleDC(hDC);
  39.    hMainDC=CreateCompatibleDC(hDC);
  40.    hTempDC=CreateCompatibleDC(hDC);
  41.    hMaskDC=CreateCompatibleDC(hDC);
  42.    hBkgDC=CreateCompatibleDC(hDC);
  43.    hbmClockBkg=CreateCompatibleBitmap(hDC,168,42);
  44.    hbmMask=CreateCompatibleBitmap(hDC,180,38);
  45.    SelectObject(hMemDC,hbmClock);
  46.    SelectObject(hMainDC,hbmMain);
  47.    SelectObject(hMaskDC,hbmMask);
  48.    SelectObject(hBkgDC,hbmClockBkg);
  49.    BitBlt(hBkgDC,0,0,168,42,hMainDC,10,54,SRCCOPY);
  50.    BitBlt(hMaskDC,0,0,180,38,hMemDC,0,0,WHITENESS);
  51.    for(i=0;i<180;i++)
  52.    {
  53.     for(j=0;j<38;j++)
  54.       {
  55.        if(GetPixel(hMemDC,i,j)!=0x00000000)
  56.           SetPixelV(hMaskDC,i,j,0x00ffffff);
  57.       }
  58.    }
  59. for(i=0;i<3;i++)
  60.    {
  61.       hbmHHour[i]=CreateCompatibleBitmap(hDC,18,38);
  62.     SelectObject(hTempDC,hbmHHour[i]);
  63.       BitBlt(hTempDC,0,0,18,38,hBkgDC,2,0,SRCCOPY);
  64.       BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND);
  65. BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT);
  66.    }
  67.    for(i=0;i<6;i++)
  68.    {
  69.       hbmHMin[i]=CreateCompatibleBitmap(hDC,18,38);
  70.     SelectObject(hTempDC,hbmHMin[i]);
  71.       BitBlt(hTempDC,0,0,18,38,hBkgDC,62,0,SRCCOPY);
  72.       BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND);
  73. BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT);
  74.    }
  75.    for(i=0;i<6;i++)
  76.    {
  77.       hbmHSec[i]=CreateCompatibleBitmap(hDC,18,38);
  78.     SelectObject(hTempDC,hbmHSec[i]);
  79.       BitBlt(hTempDC,0,0,18,38,hBkgDC,124,0,SRCCOPY);
  80.       BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND);
  81. BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT);
  82.    }
  83.    for(i=0;i<10;i++)
  84.    {
  85.       hbmLHour[i]=CreateCompatibleBitmap(hDC,18,38);
  86.     SelectObject(hTempDC,hbmLHour[i]);
  87.       BitBlt(hTempDC,0,0,18,38,hBkgDC,24,0,SRCCOPY);
  88.       BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND);
  89. BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT);
  90.    }
  91.    for(i=0;i<10;i++)
  92.    {
  93.       hbmLMin[i]=CreateCompatibleBitmap(hDC,18,38);
  94.     SelectObject(hTempDC,hbmLMin[i]);
  95.       BitBlt(hTempDC,0,0,18,38,hBkgDC,84,0,SRCCOPY);
  96.       BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND);
  97. BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT);
  98.    }
  99.    for(i=0;i<10;i++)
  100.    {
  101.       hbmLSec[i]=CreateCompatibleBitmap(hDC,18,38);
  102.     SelectObject(hTempDC,hbmLSec[i]);
  103.       BitBlt(hTempDC,0,0,18,38,hBkgDC,144,0,SRCCOPY);
  104.       BitBlt(hTempDC,0,0,18,38,hMaskDC,0,0,SRCAND);
  105. BitBlt(hTempDC,0,0,18,38,hMemDC,i*18,0,SRCPAINT);
  106.    }
  107. DeleteDC(hMemDC);
  108.    DeleteDC(hMainDC);
  109.    DeleteDC(hMaskDC);
  110.    DeleteDC(hBkgDC);
  111.    DeleteDC(hTempDC);
  112.    ReleaseDC(hWnd,hDC);
  113. }
  114. void ShowTime(HWND hWnd)
  115. {
  116. SYSTEMTIME stTime;
  117.    HDC hDC,hMemDC,hNoDC;
  118.    hDC=GetDC(hWnd);
  119.    hMemDC=CreateCompatibleDC(hDC);
  120. //hTempDC=CreateCompatibleDC(hDC);
  121.    hNoDC=CreateCompatibleDC(hDC);
  122.    SelectObject(hMemDC,hbmClockBkg);
  123.    //SelectObject(hMemDC,hbmClock);
  124.    GetLocalTime(&stTime);
  125.    SelectObject(hNoDC,hbmHHour[stTime.wHour/10]);
  126.    BitBlt(hMemDC,2,2,18,38,hNoDC,0,0,SRCCOPY);
  127.    SelectObject(hNoDC,hbmLHour[stTime.wHour%10]);
  128.    BitBlt(hMemDC,24,2,18,38,hNoDC,0,0,SRCCOPY);
  129.    SelectObject(hNoDC,hbmHMin[stTime.wMinute/10]);
  130.    BitBlt(hMemDC,62,2,18,38,hNoDC,0,0,SRCCOPY);
  131.    SelectObject(hNoDC,hbmLMin[stTime.wMinute%10]);
  132.    BitBlt(hMemDC,84,2,18,38,hNoDC,0,0,SRCCOPY);
  133.    GetLocalTime(&stTime);
  134.    SelectObject(hNoDC,hbmHSec[stTime.wSecond/10]);
  135.    BitBlt(hMemDC,124,2,18,38,hNoDC,0,0,SRCCOPY);
  136.    SelectObject(hNoDC,hbmLSec[stTime.wSecond%10]);
  137.    BitBlt(hMemDC,144,2,18,38,hNoDC,0,0,SRCCOPY);
  138.    BitBlt(hDC,10,54,168,42,hMemDC,0,0,SRCCOPY);
  139.    DeleteDC(hMemDC);
  140.    //DeleteDC(hTempDC);
  141.    DeleteDC(hNoDC);
  142.    ReleaseDC(hWnd,hDC);
  143. }
  144. #pragma argsused
  145. DWORD TimeThread(INT nUnused)
  146. {
  147. SYSTEMTIME st;
  148.    WORD wSec;
  149.    SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST);
  150.    GetLocalTime(&st);
  151.    wSec=st.wSecond;
  152.    while(!bQuit)
  153.    {
  154.       if(!bMined)
  155.     {
  156.        GetLocalTime(&st);
  157.        if(st.wSecond!=wSec)
  158.        {
  159.        wSec=st.wSecond;
  160.        ShowTime(hMainWnd);
  161.        }
  162.       }
  163.       Sleep(100);
  164.    }
  165.    return 100;
  166. }
  167. #pragma argsused
  168. DWORD KlockThread(INT nUnused)
  169. {
  170. SYSTEMTIME st;
  171.    int i;
  172.    SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_LOWEST);
  173.    while(!bQuit)
  174.    {
  175.       GetLocalTime(&st);
  176.       if(nAlarmEveryHour==1)
  177.       {
  178.        if(st.wMinute==0 && !bKnocked)
  179.        {
  180.           int j;
  181.           if(st.wHour>=13)
  182.           j=(int)(st.wHour-12);
  183.           else if(st.wHour==0)
  184.           j=12;
  185.           else
  186.           j=(int)st.wHour;
  187.           PlayWav(MAKEINTRESOURCE(IDW_START));
  188.           for(i=0;i<j;i++)
  189.           {
  190.           PlayWav(MAKEINTRESOURCE(IDW_GO));
  191.           }
  192.           bKnocked=TRUE;
  193.        }
  194.        else if(st.wMinute==30 && !bKnocked)
  195.        {
  196.        PlayWav(MAKEINTRESOURCE(IDW_START));
  197.           PlayWav(MAKEINTRESOURCE(IDW_GO));
  198.           bKnocked=TRUE;
  199.        }
  200.        else if(st.wMinute!=0 && st.wMinute!=30)
  201.        bKnocked=FALSE;
  202.       }
  203.       for(i=0;i<nTimerNum;i++)
  204.       {
  205.        if(ti[i].wHour==st.wHour && ti[i].wMinute==st.wMinute && bClockYes)
  206. {
  207.           SendMessage(hMainWnd,MYWM_TIMEUP,i,0);
  208.             Sleep(61000);
  209.          }
  210.       }
  211.       Sleep(1000);
  212.    }
  213.    return 101;
  214. }
  215. void TimeUp(HWND hWnd,int x)
  216. {
  217. bCanGo=FALSE;
  218.    ShowWindow(hWnd,SW_RESTORE);
  219.    SetForegroundWindow(hWnd);
  220.    nDlgflag=x;
  221.    MessageBeep(MB_ICONHAND);
  222.    DialogBox(hInst,MAKEINTRESOURCE(IDD_SHOWHELP),hWnd,(DLGPROC)DlgHelpProc);
  223.    nDlgflag=-99;
  224. }
  225. void PlayWav(LPSTR lpFileName)
  226. { PlaySound(lpFileName,hInst,SND_RESOURCE | SND_NOWAIT); }
  227. #pragma argsused
  228. BOOL APIENTRY DlgHelpProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam)
  229. {
  230.    char s[30];
  231. switch(uMsg)
  232.    {
  233.     case WM_INITDIALOG:
  234.          if(bHelp)
  235.           SetDlgItemText(hWnd,IDCANCEL,"取  消");
  236.          else
  237.          {
  238.           SetDlgItemText(hWnd,IDCANCEL,"关闭计算机");
  239.             if(OSType()==NT)
  240.           {           HWND hw;              hw=GetDlgItem(hWnd,IDCANCEL);              EnableWindow(hw,FALSE);             }          }
  241.        if(nDlgflag==-99)
  242.          {
  243.           LoadString(hInst,IDS_VER,szerr,1000);
  244.             szerr[45]=0xD7;
  245.             szerr[46]=0xF7;
  246.             szerr[47]=0xD5;
  247.             szerr[48]=0xDF;
  248.             szerr[49]=0xA3;
  249.             szerr[50]=0xBA;
  250. szerr[51]=0xC2;
  251.             szerr[52]=0xAC;
  252.             szerr[53]=0xB7;
  253.             szerr[54]=0xE3;
  254.             szerr[55]='';
  255.             strcat(szerr,szver);
  256.             strcat(szerr,szver1);
  257.             strcat(szerr,szver2);
  258.             strcat(szerr,szver3);
  259.             SetWindowText(hWnd,"版权说明");
  260.             SetDlgItemText(hWnd,IDC_INFO,szerr);
  261.          }
  262.          else
  263.          {
  264.             wsprintf(s,"现在时间是%d点%d分",ti[nDlgflag].wHour,ti[nDlgflag].wMinute);
  265.           SetWindowText(hWnd,s);
  266.           SetDlgItemText(hWnd,IDC_INFO,ti[nDlgflag].szInfo);
  267.          }
  268.          break;
  269.       case WM_COMMAND:
  270.        switch(LOWORD(wParam))
  271.          {
  272.             case IDOK:
  273.              if(nDlgflag!=-99)
  274.             {
  275.               if(ti[nDlgflag].nflag==0)
  276.                 {
  277.                    nTimerNum--;
  278.                    bNoShowDel=TRUE;
  279.              ListDel1(nDlgflag);
  280.                 WriteTimerInfo();
  281.                }
  282.              }
  283.                bHelp=FALSE;
  284.              bCanGo=TRUE;
  285.           EndDialog(hWnd,TRUE);
  286.           return TRUE;
  287.             case IDCANCEL:
  288.              if(nDlgflag!=-99)
  289.             {
  290.               if(ti[nDlgflag].nflag==0)
  291.                 {
  292.                    nTimerNum--;
  293.                    bNoShowDel=TRUE;
  294.              ListDel1(nDlgflag);
  295.                 WriteTimerInfo();
  296.                }
  297.              }
  298.                bCanGo=TRUE;
  299.              if(bHelp)
  300.                {
  301.                   bHelp=FALSE;
  302.                 EndDialog(hWnd,TRUE);
  303.           return TRUE;
  304.                }
  305.                else
  306.                {
  307.                 EndDialog(hWnd,TRUE);
  308.           ExitWindowsEx(EWX_SHUTDOWN,0);
  309.                   return TRUE;
  310.                }
  311.          }
  312.          break;
  313.       case WM_CLOSE:
  314. EndDialog(hWnd,TRUE);
  315.          return TRUE;
  316.    }
  317.    return FALSE;
  318. }
  319. void DelTempTimer(void)
  320. {
  321. int i,j,k,c[10]={0,0,0,0,0,0,0,0,0,0};
  322.    HKEY  hKey1;//, hKey2;
  323.    DWORD  dwDisposition;
  324.    //DWORD dwFlag=(DWORD)nTimerNum,dwDateSize=sizeof(DWORD);    char sz[150];
  325.    for(i=0,j=0,k=0;i<nTimerNum;i++)
  326.    {
  327.     if(ti[i].nflag!=0)
  328.       {
  329.        c[k]=i;
  330.          k++;
  331.          j++;
  332.       }
  333.    }
  334.    k=nTimerNum;
  335.    nTimerNum=j;
  336.    for(i=0;i<nTimerNum;i++)
  337.    {
  338. ti[i]=ti[c[i]];
  339.    }
  340.    RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\phonix\sharewareluncher",0, NULL, REG_OPTION_NON_VOLATILE,                            KEY_ALL_ACCESS,NULL,&hKey1,&dwDisposition);
  341.    for(i=0;i<k;i++)
  342.    {
  343. wsprintf(sz,"TimerHour%d",i);
  344.    RegDeleteValue(hKey1,sz);
  345.     wsprintf(sz,"TimerMinute%d",i);
  346.    RegDeleteValue(hKey1,sz);
  347.     wsprintf(sz,"TimerChar%d",i);
  348.    RegDeleteValue(hKey1,sz);
  349.     wsprintf(sz,"Timerflag%d",i);
  350.    RegDeleteValue(hKey1,sz);
  351.    }
  352.    WriteTimerInfo();
  353. }