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

Visual C++

  1. #include <userdlg.h> #include <cpl.h> #include <dde.h> #include "resource.h" #include "sharewareluncher.h" #include "time1.h" #include "tab.h" #define MYWM_EXEACT (WM_USER+112) #define RUN_MIN 0 #define RUN_UNINSTALL 1 #define RUN_CLOSE 2 #define RUN_EXE 3 typedef struct tagcool { int idx;
  2. }COOLITEM,*LPCOOLITEM; HDDEDATA CALLBACK DdeCallBack(UINT uType,UINT uFmt,HCONV hConv,HSZ hsz1,HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dwData2); void ExeAction(LPSTR); int Runit(BOOL); void MakeShortcut(void); void Uninstall(BOOL bSysOnly); void MakeUninstallLnk(BOOL); void Getcmd(void); BOOL CALLBACK APIENTRY QuitProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam); BOOL VRHD(void); void RegCancelSubst(void); BOOL CancelSubst(void); extern int CutCmdLine(LPSTR s); HINSTANCE hInst; HBITMAP hbmMain,hbmSysButton,hbmAct,hbmClock,hbmBkg; RECT Size; BUTTONPOS bsSys[]={{0,206,8,16,14,0,0,TRUE},{1,240,8,16,14,16,0,TRUE}}; BUTTONPOS bsSysOrg[]={{0,206,8,16,14,206,8,TRUE},{1,240,8,16,14,240,8,TRUE}}; BUTTONPOS bsAct[]={{0,24,209,45,21,0,0,TRUE},{1,88,209,45,21,0,21,TRUE},{2,154,209,45,21,0,42,TRUE}}; BUTTONPOS bsActPushed[]={{0,24,209,45,21,45,0,TRUE},{1,88,209,45,21,45,21,TRUE},{2,154,209,45,21,45,42,TRUE}}; BUTTONPOS bsActOrg[]={{0,24,209,45,21,24,209,TRUE},{1,88,209,45,21,88,209,TRUE},{2,154,209,45,21,154,209,TRUE}}; char szErrr[300]; extern char szErr[256]; BOOL bInTarget=FALSE,bHold=FALSE,bHoldInAct=FALSE,InReady=TRUE,bInAct=FALSE; int i,iSysNo=-1,nActNo=-1,iActNo=-1; HMENU hmenu; HMENU hmenuTrackPopup; BOOL bSetAuto=FALSE,bRunMin=FALSE; DWORD dwThreadId=0,dwKlockId=1; extern APPINFO aiAppInfo[50]; HWND hMainWnd; BOOL bMined=FALSE,bQuit=FALSE,bDlgRuned=FALSE; TIMERINFO ti[10]; extern int nAlarmEveryHour,nDlgflag; extern int nAppNum; extern BOOL bSheet; extern HWND hSheetWnd; extern HBITMAP hbmHHour[3],hbmLHour[10],hbmHMin[6],hbmLMin[10]; extern HBITMAP hbmHSec[6],hbmLSec[10],hbmClockBkg; HANDLE hTimeSecWnd; BOOL bHelp=FALSE,bVerChanged=FALSE; /////////flag of vrhd//////// BOOL IsVRHD=FALSE; //=true,drive a: is virtual floppy disk /////DDE diclare/////////// DWORD idInst=0; char szDdeTitle[]="sharewareluncher"; HSZ hszAppName; HCONV hConv; char szCommand[300]; int nRunflag; ////////////////////////// extern HWND hBaseWnd; extern HWND hListAppWnd,hAddWnd; char szRunCommand[300]; BOOL bAddExe=FALSE,bCreateLink=FALSE; char cmd[MAX_PATH]; ///////cool menu////////// DRAWITEMSTRUCT dis; COOLITEM ci[50]; int nOldSel=-1,nSel=-1; HICON hicon[50]; HWND hQuitWnd=NULL; //标记“退出”对话框已显示,不能显示多个相同对话框 BOOL InitApplication(HINSTANCE hInstance) { WNDCLASS  wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (long (FAR PASCAL*)())MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPICON)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL;//"NINJA";  // Name of menu resource in .RC file. wc.lpszClassName = "MyApp"; // Name used in call to CreateWindow. return (RegisterClass(&wc)); } BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND  hWnd; hWnd = CreateWindowEx(     0,//WS_EX_TOOLWINDOW, "MyApp", "共享软件程序发射器", WS_POPUP,//|WS_SIZEBOX, (Size.right-265)/2, (Size.bottom-240)/2, 265,// Default width. 240,// Default height. NULL, NULL,// Use the window class menu. hInstance, NULL ); if (!hWnd) return (FALSE);    //ShowOwnedPopups(hWnd,TRUE);    if(bRunMin)     ShowWindow(hWnd,SW_MINIMIZE);    else ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return (TRUE); } #pragma argsused int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hNull,LPSTR lpCmdLine, int nCmdShow) {    MSG msg; hInst=hInstance;    if(strcmp(lpCmdLine,"")==0)       nRunflag=RUN_CLOSE; else if(strcmp(lpCmdLine,"/u")==0)       nRunflag=RUN_UNINSTALL;    else    {     if(strcmp(lpCmdLine,"/s")==0)     {     bRunMin=TRUE;        nRunflag=RUN_MIN;     }     else     {        bRunMin=FALSE;     nRunflag=RUN_EXE;       }    }    GetWindowRect(GetDesktopWindow(),&Size); if (!InitApplication(hInstance)) return (FALSE);    if(DdeInitialize(&idInst,(PFNCALLBACK)DdeCallBack,     APPCMD_FILTERINITS|CBF_SKIP_CONNECT_CONFIRMS|CBF_FAIL_SELFCONNECTIONS|CBF_FAIL_POKES,0))     return (FALSE);    hszAppName=DdeCreateStringHandle(idInst,szDdeTitle,0);    DdeNameService(idInst,hszAppName,0,DNS_REGISTER);    hConv=DdeConnect(idInst,hszAppName,hszAppName,NULL);    if(hConv!=NULL)    {     switch(nRunflag)       {        case RUN_CLOSE:           wsprintf(szCommand,"Restore");             break;          case RUN_UNINSTALL:             if(MessageBox(GetFocus(),"即将删除本软件在注册表中登记的内容,你以前的设置均会无用,继续吗?",     "清除发射器设置",MB_YESNO | MB_ICONWARNING)==IDNO) {              nRunflag=RUN_CLOSE;                wsprintf(szCommand,"Restore");             }             else           wsprintf(szCommand,"Uninstall");             break;          case RUN_EXE:           wsprintf(szCommand,lpCmdLine);             break;          default:           wsprintf(szCommand,"");       }       if(nRunflag==RUN_UNINSTALL)       {          if(DdeClientTransaction((LPBYTE)szCommand,strlen(szCommand)+1,hConv,0,0,XTYP_EXECUTE,TIMEOUT_ASYNC,NULL))        //if(DdeGetLastError(idInst)==DMLERR_SERVER_DIED)             {                DdeNameService(idInst,hszAppName,0,DNS_UNREGISTER);        DdeUninitialize(idInst);              Uninstall(FALSE);                return 0L;             }       }       if(!DdeClientTransaction((LPBYTE)szCommand,strlen(szCommand)+1,hConv,0,0,XTYP_EXECUTE,6000,NULL))       {        switch(DdeGetLastError(idInst))          {             case DMLERR_BUSY:              DdeClientTransaction((LPBYTE)szCommand,strlen(szCommand)+1,hConv,0,0,XTYP_EXECUTE,6000,NULL);                break;          }       }       DdeNameService(idInst,hszAppName,0,DNS_UNREGISTER);       DdeUninitialize(idInst);       return 0L;//(FALSE);    }    else    {     if(nRunflag==RUN_UNINSTALL)       {        if(MessageBox(GetFocus(),"即将删除本软件在注册表中登记的内容,你以前的设置均会无用,继续吗?",     "清除发射器设置",MB_YESNO | MB_ICONWARNING)==IDYES)          {           Uninstall(FALSE);             return 0L;          }       }     if(nRunflag==RUN_CLOSE)        bRunMin=FALSE;       else        bRunMin=TRUE;     wsprintf(szRunCommand,lpCmdLine); }    hbmMain=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_MAIN));    hbmSysButton=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_SYSBUTTON));    hbmAct=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_ACT));    hbmClock=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_NUM));    hbmBkg=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BKG)); if (!InitInstance(hInstance, nCmdShow)) { //    DdeUninitialize(idInst);     return (FALSE);    }    if( NOERROR != OleInitialize(NULL))         return FALSE; while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); }    OleUninitialize() ; return (msg.wParam); } #pragma argsused LRESULT APIENTRY MainWndProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) {    HDC hDC,hMemDC;    PAINTSTRUCT ps;    hMainWnd=hWnd; switch(uMsg) {       case WM_CREATE: //         SetCursor(LoadCursor(hInst,IDC_ARROW));          {           int i;             for(i=0;i<10;i++)             {              ti[i].wHour=0;                ti[i].wMinute=0;                ti[i].nflag=0;                wsprintf(ti[i].szInfo,"");             }          }        hDC=GetDC(hWnd);          hMemDC=CreateCompatibleDC(hDC);          SelectObject(hMemDC,hbmMain);          BitBlt(hDC,0,0,265,240,hMemDC,0,0,SRCCOPY);          DeleteDC(hMemDC);          ReleaseDC(hWnd,hDC);          PutToTaskBar(hWnd,0,LoadIcon(hInst,MAKEINTRESOURCE(IDI_APPICON)),"共享软件程序发射器");          InitTimeBmp(hWnd);          hmenu = LoadMenu(hInst, MAKEINTRESOURCE(IDM_POPUP));          if (hmenu)
  3.             hmenuTrackPopup = GetSubMenu(hmenu, 0);
  4.          CheckReg(); Getcmd();          if(bSetAuto)          {             REGVALINFO ri;             char sztemp[MAX_PATH];             ri.szValName=NULL;    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)"通过发射器创建快捷方式";    ri.cbData=30;             RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\shell\ShortcutfromLuncher",1,&ri);             RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\shell\ShortcutfromLuncher",1,&ri);           ri.szValName=NULL;//"DisplayName";    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)"通过发射器启动";    ri.cbData=20;
  5.     RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\shell\AddtoLuncher",1,&ri);             RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\shell\AddtoLuncher",1,&ri);             ri.szValName=NULL;    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)"虚拟软驱";    ri.cbData=10;             RegSetGroupVal(HKEY_CLASSES_ROOT,"Directory\shell\sharewareluncher.vrhd",1,&ri);             wsprintf(sztemp,cmd);             strcat(sztemp," -create %1");             ri.szValName=NULL;    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)sztemp;    ri.cbData=MAX_PATH;             RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\shell\ShortcutfromLuncher\command",1,&ri);             RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\shell\ShortcutfromLuncher\command",1,&ri);             wsprintf(sztemp,cmd);             strcat(sztemp," -add %1");             ri.szValName=NULL;//"DisplayName";    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)sztemp;    ri.cbData=MAX_PATH;
  6.     RegSetGroupVal(HKEY_CLASSES_ROOT,"exefile\shell\AddtoLuncher\command",1,&ri);             RegSetGroupVal(HKEY_CLASSES_ROOT,"scrfile\shell\AddtoLuncher\command",1,&ri);             wsprintf(sztemp,cmd);             strcat(sztemp," -vrhd %1");             ri.szValName=NULL;    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)sztemp;    ri.cbData=MAX_PATH;             RegSetGroupVal(HKEY_CLASSES_ROOT,"Directory\shell\sharewareluncher.vrhd\command",1,&ri);           SetAutoRun("Sharewareluncher","/s",TRUE);             MakeUninstallLnk(TRUE);             ChangeShortcut();          }          if(bVerChanged)          {             bVerChanged=FALSE;           SetAutoRun("Sharewareluncher","/s",TRUE);             Uninstall(TRUE);          }          hTimeSecWnd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TimeThread,0,0,&dwThreadId);          CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)KlockThread,0,0,&dwKlockId);          RemapMenu();          GetAllIcon();          if(nRunflag==RUN_EXE)             ExeAction(szRunCommand); break;       case WM_MEASUREITEM:        MeasureItem(lParam);          break;       case WM_DRAWITEM:          DrawItem((LPDRAWITEMSTRUCT)lParam);        break;       case WM_MENUSELECT:        if(LOWORD(wParam)!=0)       {           nOldSel=nSel; nSel=LOWORD(wParam);             SendMessage(hWnd,WM_DRAWITEM,nSel,(LPARAM)&dis);             nSel=-1; } return 0; case WM_PAINT:          hDC=BeginPaint(hWnd,&ps);          hMemDC=CreateCompatibleDC(hDC);          SelectObject(hMemDC,hbmMain);          BitBlt(hDC,0,0,265,240,hMemDC,0,0,SRCCOPY);          DeleteDC(hMemDC);          EndPaint(hWnd,&ps);          ShowTime(hWnd);          break;       case MYWM_TIMEUP:        TimeUp(hWnd,(int)wParam);          break;       case MYWM_EXEACT: ExeAction((LPSTR)lParam);          break;       case MYWM_ICON:          switch(lParam)          {           case WM_LBUTTONDOWN:              ShowWindow(hWnd,SW_RESTORE);                SetForegroundWindow(hWnd);                break;             case WM_RBUTTONUP:             {              POINT pt;
  7.                SetForegroundWindow(hWnd);
  8.                SetActiveWindow(hWnd);
  9.                GetCursorPos(&pt);
  10.          TrackPopupMenuEx(hmenuTrackPopup,
  11.                          TPM_LEFTALIGN | TPM_TOPALIGN |     // default values
  12.                          TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0
  13.                          TPM_RIGHTBUTTON,                   // Right selection
  14.                          pt.x, pt.y,
  15.                          hWnd,
  16.                          NULL);
  17.          //DestroyMenu(hmenu);
  18.      }      break;          }          break;       case WM_SIZE:        if(wParam==SIZE_MINIMIZED)          {             bMined=TRUE;             ShowWindow(hWnd,SW_SHOWMINIMIZED);//SW_HIDE);             SetWindowPos(hWnd, HWND_TOP, 0, 0, 265, 240, SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW) ;             SuspendThread(hTimeSecWnd);          }          else          {           bMined=FALSE;             ResumeThread(hTimeSecWnd);          }          break;       case WM_LBUTTONDOWN:    if(HIWORD(lParam)<25)          {             if(LOWORD(lParam)<25)             {              RECT rc;                GetWindowRect(hWnd,&rc);              TrackPopupMenuEx(hmenuTrackPopup,                          TPM_LEFTALIGN | TPM_TOPALIGN |     // default values
  19.                          TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0
  20.                          TPM_RIGHTBUTTON,                   // Right selection
  21.                          rc.left, rc.top+25,
  22.                          hWnd,
  23.                          NULL);                break;             }           i=JudgePoint(lParam,2,bsSys);        switch(i)           {           case -1:                   EasyMove(hWnd);             break;              case 0:                 ShowPush(hWnd,hbmSysButton,0,bsSys[i]);                   bHold=TRUE;                   bInTarget=TRUE;                   iSysNo=0;                 break;              case 1:              ShowPush(hWnd,hbmSysButton,0,bsSys[i]);                   bHold=TRUE;                   bInTarget=TRUE;                   iSysNo=1;                 break;           }          }          if(HIWORD(lParam)>208)          {           if(InReady)              break;             i=JudgePoint(lParam,3,bsAct);             switch(i)             {              case -1:                 break;                case 0:                 ShowPush(hWnd,hbmAct,0,bsActPushed[0]);                   bHoldInAct=TRUE;                   bInAct=TRUE;                   iActNo=0;                   break;                case 1:                 ShowPush(hWnd,hbmAct,0,bsActPushed[1]);                   bHoldInAct=TRUE;                   bInAct=TRUE;                   iActNo=1;                   break;                case 2:                 ShowPush(hWnd,hbmAct,0,bsActPushed[2]);                   bHoldInAct=TRUE;                   bInAct=TRUE;                   iActNo=2;                   break;             }          }        break;       case WM_MOUSEMOVE:        if(!bHold && !bHoldInAct)          {           i=JudgePoint(lParam,3,bsAct);             if(i!=nActNo && InReady && i!=-1)           {           ShowPush(hWnd,hbmAct,0,bsAct[i]);              InReady=FALSE;              nActNo=i;           }             else if(i!=nActNo)             {              ShowPush(hWnd,hbmMain,0,bsActOrg[nActNo]);                if(i!=-1)                {                 ShowPush(hWnd,hbmAct,0,bsAct[i]);                   InReady=FALSE;                }                else                 InReady=TRUE;                nActNo=i;             }             break;          }          if(bHoldInAct)          {           i=JudgePoint(lParam,3,bsAct);           if(i!=iActNo && bInAct)           {           ShowPush(hWnd,hbmMain,0,bsActOrg[iActNo]);              bInAct=FALSE;           }           else if(i==iActNo)           {           ShowPush(hWnd,hbmAct,0,bsActPushed[i]);              bInAct=TRUE;           }          }          if(bHold)          {           i=JudgePoint(lParam,2,bsSys);           if(i!=iSysNo && bInTarget)           {           ShowPush(hWnd,hbmMain,0,bsSysOrg[iSysNo]);             bInTarget=FALSE;           }           else if(i==iSysNo)           {           ShowPush(hWnd,hbmSysButton,0,bsSys[i]);             bInTarget=TRUE;           }          }          break;       case WM_LBUTTONUP:          if(HIWORD(lParam)>208)          {           i=JudgePoint(lParam,3,bsAct);           if(i!=-1 && bInAct)           {           switch(i)           {           case 0:              ShowPush(hWnd,hbmAct,0,bsAct[0]);                 ShowWindow(hWnd,SW_MINIMIZE);                 break;              case 1:                      ShowPush(hWnd,hbmAct,0,bsAct[1]);                      CreatePropertySheet(hWnd);                      break;                   case 2:                    ShowPush(hWnd,hbmAct,0,bsAct[2]);                      nDlgflag=-99;                      bHelp=TRUE;                      DialogBox(hInst,MAKEINTRESOURCE(IDD_SHOWHELP),hWnd,(DLGPROC)DlgHelpProc);                    break;           }           }          }          else if(HIWORD(lParam)<25)          {           i=JudgePoint(lParam,2,bsSys);           if(i!=-1 && bInTarget)           {           switch(i)           {           case 0:              ShowPush(hWnd,hbmMain,0,bsSysOrg[i]);                 ShowWindow(hWnd,SW_MINIMIZE);                 break;              case 1:                 ShowPush(hWnd,hbmMain,0,bsSysOrg[i]);                      ShowWindow(hWnd,SW_MINIMIZE);                 break;           }           }          }          bHoldInAct=bInAct=bHold=bInTarget=FALSE;;          iActNo=iSysNo=-1;          break;       case WM_RBUTTONDOWN:        if(HIWORD(lParam)>24 && JudgePoint(lParam,3,bsAct)==-1)       {             POINT pt;
  24.             GetCursorPos(&pt);
  25.       TrackPopupMenuEx(hmenuTrackPopup,
  26.                          TPM_LEFTALIGN | TPM_TOPALIGN |     // default values
  27.                          TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0
  28.                          TPM_RIGHTBUTTON,                   // Right selection
  29.                          pt.x, pt.y,
  30.                          hWnd,
  31.                          NULL);          } break ; case WM_COMMAND: switch(wParam) { case CM_SETCLOCK:              RunControlPanel("timedate.cpl");              break;             case CM_ADD:                if(!bDlgRuned && !bSheet)                   DialogBox(hInst,MAKEINTRESOURCE(IDD_LIST),hWnd,(DLGPROC)ListWndProc); else if(bSheet)                {                 PropSheet_SetCurSel(hSheetWnd,NULL,1);                }              break;             case CM_QUIT:                if(hQuitWnd==NULL)                 if(DialogBox(hInst,MAKEINTRESOURCE(IDD_QUIT),hWnd,(DLGPROC)QuitProc))              SendMessage(hWnd,WM_DESTROY,0,0);                break;             default:                if((int)wParam<11000 && (int)wParam>11050)                 break;                if(!Lunch(hWnd,(int)wParam-11000))                {              wsprintf(szErrr,"不能启动"%s"程序,请检查程序设置",aiAppInfo[(int)wParam-11000].szAppName);                 Errmsg(szErrr);                }                break; } break;       case WM_TIMER:        DoTimer(hWnd,(UINT)wParam);          break;       case WM_DESTROY:       case WM_QUERYENDSESSION:          if(hBaseWnd!=NULL)           SendMessage(hBaseWnd,WM_CLOSE,0,0);          DdeNameService(idInst,hszAppName,0,DNS_UNREGISTER);          DdeUninitialize(idInst);          DelTempTimer();          bQuit=TRUE;        DelFromTaskBar(hWnd,0,"共享软件程序发射器");          DeleteObject(hbmAct);          DeleteObject(hbmClock);          DeleteObject(hbmMain);          DeleteObject(hbmSysButton);          DeleteObject(hbmBkg);          {           int n;             for(n=0;n<3;n++)              DeleteObject(hbmHHour[i]);             for(n=0;n<10;n++)             {              DeleteObject(hbmLHour[i]);                DeleteObject(hbmLMin[i]);                DeleteObject(hbmLSec[i]);             }             for(n=0;n<6;n++)             {              DeleteObject(hbmHMin[i]);                DeleteObject(hbmHSec[i]);             }             DeleteObject(hbmClockBkg);             for(n=0;n<nAppNum;n++)     DestroyIcon(hicon[n]);          }          DestroyMenu(hmenu);          PostQuitMessage(0); default: return (DefWindowProc(hWnd,uMsg,wParam,lParam)); } return 0L; } BOOL InFloppyDisk(int a) { LPTSTR CmdLine1;
  32.    char aa[5];
  33.    CmdLine1=GetCommandLine();
  34.    if((CmdLine1[1]=='a' || CmdLine1[1]=='A' || CmdLine1[1]=='b' || CmdLine1[1]=='B') && CmdLine1[2]==':')
  35.    {
  36.       if(a==0)
  37.     MessageBox(GetFocus(),"你正在软盘上运行程序,请先拷贝到硬盘上再执行,n
  38. 否则程序在下次Windows启动时不能自动执行,闹钟功能无法使用。",
  39.                   "警告",MB_OK | MB_ICONWARNING);
  40.       return TRUE;
  41.    }
  42.    aa[0]=CmdLine1[1];aa[1]=CmdLine1[2];aa[2]=CmdLine1[3];aa[3]='';//CmdLine[1];
  43.    if(GetDriveType(aa)==DRIVE_CDROM)
  44.    {
  45.       if(a==0)
  46.     MessageBox(GetFocus(),"你正在光盘上运行程序,请先拷贝到硬盘上再执行,n
  47. 否则程序在下次Windows启动时不能自动执行,闹钟功能无法使用。",
  48.                   "警告",MB_OK | MB_ICONWARNING);
  49.       return TRUE;
  50.    }
  51.    return FALSE;
  52. } #pragma argsused HDDEDATA CALLBACK DdeCallBack(UINT uType,UINT uFmt,HCONV hConv,HSZ hsz1,HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dwData2) {    LPBYTE pData;    DWORD dwLength; switch(uType)    {     case XTYP_CONNECT:          return (HDDEDATA)TRUE;//break;       case XTYP_EXECUTE:        pData=DdeAccessData(hData,&dwLength);          if(strcmp((LPSTR)pData,"Restore")==0)          {             ShowWindow(hMainWnd,SW_RESTORE);           SetForegroundWindow(hMainWnd);          }          else if(strcmp((LPSTR)pData,"Uninstall")==0)          {           PostMessage(hMainWnd,WM_DESTROY,0,0);           return (HDDEDATA)TRUE;//break;          }          else if(strcmp((LPSTR)pData,"")==0)           break;          else             PostMessage(hMainWnd,MYWM_EXEACT,0,(LPARAM)pData);//ExeAction((LPSTR)pData);          return (HDDEDATA)0;    }    return (HDDEDATA)0; } void ExeAction(LPSTR s) {    int i;    if(s[0]=='-' && s[1]=='a' && s[2]=='d' && s[3]=='d')    {       POINT pt;       i=0;       GetCursorPos(&pt);       while(s[i+5]!='')       {        szRunCommand[i]=s[i+5];          i++;       }       szRunCommand[i]='';       if(Runit(TRUE)!=-1)        return;       bAddExe=TRUE;       if(!bDlgRuned && !bSheet)        SendMessage(hMainWnd,WM_COMMAND,CM_ADD,0);       else       {          PropSheet_SetCurSel(hSheetWnd,NULL,1);        SetWindowPos(hListAppWnd,HWND_TOPMOST,pt.x,pt.y,0,0,SWP_NOSIZE);          if(hAddWnd==NULL)        SendMessage(hListAppWnd,WM_COMMAND,(WPARAM)IDOK,0);          else           SendMessage(hListAppWnd,MYWM_TIMEUP,0,0); //MYWM_TIMEUP 为临时借用       }    }    else if(s[0]=='-' && s[1]=='c' && s[2]=='r' && s[3]=='e' && s[4]=='a' && s[5]=='t' && s[6]=='e') {       i=0;     while(s[i+8]!='')       {        szRunCommand[i]=s[i+8];          i++;       }       szRunCommand[i]='';       bCreateLink=TRUE;       MakeShortcut();    }    else if(s[0]=='-' && s[1]=='v' && s[2]=='r' && s[3]=='h' && s[4]=='d') {       i=0;     while(s[i+6]!='')       {        szRunCommand[i]=s[i+6];          i++;       }       szRunCommand[i]='';       VRHD();    }    else if(s[0]=='-' && s[1]=='n' && s[2]=='o' && s[3]=='v' && s[4]=='r' && s[5]=='h' && s[6]=='d')    {       CancelSubst();    }    else if(s[0]=='-' && s[1]=='r' && s[2]=='u' && s[3]=='n')    {       i=0;       while(s[i+5]!='')       {        szRunCommand[i]=s[i+5];          i++;       }       szRunCommand[i]='';       Runit(TRUE);    }    else    {     wsprintf(szRunCommand,s);       SendToHD();    } } BOOL VRHD(void) { STARTUPINFO si;    BOOL flag;
  53.    PROCESS_INFORMATION PInfo;
  54.    char szCommandLine[400];
  55.    char szShortPath[MAX_PATH];
  56. if(GetDriveType("a:")!=DRIVE_REMOVABLE)
  57.    {
  58.     wsprintf(szCommandLine,"subst a: /d");
  59.    memset(&si, 0, sizeof(si));
  60.     si.cb = sizeof(si);
  61.    si.dwFlags=STARTF_USESHOWWINDOW;
  62.     si.wShowWindow=SW_HIDE;
  63.    CreateProcess(
  64.                 0,                          // lpszImageName
  65.                 szCommandLine, //SzCmdLine,
  66.                 0,                          // lpsaProcess
  67.                 0,                          // lpsaThread
  68.                 FALSE,                      // fInheritHandles
  69.                 CREATE_DEFAULT_ERROR_MODE,//DEBUG_ONLY_THIS_PROCESS,    // fdwCreate
  70.                 0,                          // lpvEnvironment
  71.                 NULL,                          // lpszCurDir
  72.                 &si,//tartupInfo,               // lpsiStartupInfo
  73.                 &PInfo         // lppiProcInfo
  74.                 );
  75.    }
  76.    GetShortPathName(szRunCommand,szShortPath,MAX_PATH);
  77.    wsprintf(szCommandLine,"subst a: %s",szShortPath);
  78.    memset(&si, 0, sizeof(si));
  79.    si.cb = sizeof(si);
  80.    si.dwFlags=STARTF_USESHOWWINDOW;
  81.    si.wShowWindow=SW_HIDE;
  82.    flag=CreateProcess(
  83.                 0,                          // lpszImageName
  84.                 szCommandLine, //SzCmdLine,
  85.                 0,                          // lpsaProcess
  86.                 0,                          // lpsaThread
  87.                 FALSE,                      // fInheritHandles
  88.                 CREATE_DEFAULT_ERROR_MODE,//DEBUG_ONLY_THIS_PROCESS,    // fdwCreate
  89.                 0,                          // lpvEnvironment
  90.                 NULL,                          // lpszCurDir
  91.                 &si,//tartupInfo,               // lpsiStartupInfo
  92.                 &PInfo         // lppiProcInfo
  93.                 );
  94. if(!flag)
  95.     Errmsg("由于操作系统的限制,不能虚拟软驱。");
  96.    else
  97.     if(!IsVRHD)
  98.     {
  99.        RegCancelSubst();
  100.          IsVRHD=TRUE;
  101.       }
  102.    return flag;
  103. } void RegCancelSubst(void) { REGVALINFO ri;    char sztemp[MAX_PATH];    ri.szValName=NULL; ri.dwType=REG_SZ; ri.lpData=(LPBYTE)"取消虚拟软驱"; ri.cbData=15;    RegSetGroupVal(HKEY_CLASSES_ROOT,"Drive\shell\sharewareluncher.cancelvrhd",1,&ri);    wsprintf(sztemp,cmd);    strcat(sztemp," -novrhd %1");    ri.szValName=NULL;    ri.dwType=REG_SZ;    ri.lpData=(LPBYTE)sztemp;    ri.cbData=MAX_PATH;    RegSetGroupVal(HKEY_CLASSES_ROOT,"Drive\shell\sharewareluncher.cancelvrhd\command",1,&ri); IsVRHD=TRUE; } BOOL CancelSubst(void) {    STARTUPINFO si;    BOOL flag;
  104.    PROCESS_INFORMATION PInfo;    char szCommandLine[MAX_PATH]; if(GetDriveType("a:")!=DRIVE_REMOVABLE)    {
  105.     wsprintf(szCommandLine,"subst a: /d");
  106.    memset(&si, 0, sizeof(si));
  107.     si.cb = sizeof(si);
  108.    si.dwFlags=STARTF_USESHOWWINDOW;
  109.     si.wShowWindow=SW_HIDE;
  110.    flag=CreateProcess(
  111.                 0,                          // lpszImageName
  112.                 szCommandLine, //SzCmdLine,
  113.                 0,                          // lpsaProcess
  114.                 0,                          // lpsaThread
  115.                 FALSE,                      // fInheritHandles
  116.                 CREATE_DEFAULT_ERROR_MODE,//DEBUG_ONLY_THIS_PROCESS,    // fdwCreate
  117.                 0,                          // lpvEnvironment
  118.                 NULL,                          // lpszCurDir
  119.                 &si,//tartupInfo,               // lpsiStartupInfo
  120.                 &PInfo         // lppiProcInfo
  121.                 );
  122.    }    IsVRHD=FALSE;    RegDeleteKey(HKEY_CLASSES_ROOT,"Drive\shell\sharewareluncher.cancelvrhd");    return flag; } int Runit(BOOL flag) { int i; for(i=0;i<nAppNum;i++)    {       if(strcmpi(szRunCommand,aiAppInfo[i].szAppCmd)==0)       {          if(flag)          Lunch(hMainWnd,i);          return i;//TRUE;       }    }    return -1;//FALSE; } void MakeShortcut(void) {    int x; if((x=Runit(FALSE))!=-1)    {       char szTarget[300];       char szStartCmd[1000];       GetWindowsDirectory(szTarget,300);       strcat(szTarget,"\desktop\");       strcat(szTarget,aiAppInfo[x].szAppName);       strcat(szTarget,".lnk");       wsprintf(szStartCmd,"-run %s",szRunCommand);       CreateShortcut(cmd,szStartCmd,NULL,szTarget,aiAppInfo[x].szAppName);    }    else    {       if(!bCreateLink)        return;       //bCreateLink=TRUE;       if(!bDlgRuned && !bSheet)       SendMessage(hMainWnd,WM_COMMAND,CM_ADD,0);       else       {          PropSheet_SetCurSel(hSheetWnd,NULL,1);       SendMessage(hListAppWnd,WM_COMMAND,(WPARAM)IDOK,0);       }    } } void Uninstall(BOOL bSysOnly) { HKEY  hKey1;
  123.    DWORD  dwDisposition;
  124.    if(!bSysOnly)    {     RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0, NULL, REG_OPTION_NON_VOLATILE,                            KEY_ALL_ACCESS,NULL,&hKey1,&dwDisposition);
  125.     RegDeleteValue(hKey1,"Sharewareluncher");
  126.     RegDeleteKey(HKEY_CLASSES_ROOT,"exefile\shell\ShortcutfromLuncher");
  127.     RegDeleteKey(HKEY_CLASSES_ROOT,"exefile\shell\AddtoLuncher");
  128.       RegDeleteKey(HKEY_CLASSES_ROOT,"scrfile\shell\ShortcutfromLuncher");
  129.     RegDeleteKey(HKEY_CLASSES_ROOT,"scrfile\shell\AddtoLuncher");
  130.     RegDeleteKey(HKEY_LOCAL_MACHINE,"SOFTWARE\phonix\sharewareluncher");
  131.       RegDeleteKey(HKEY_CLASSES_ROOT,"Directory\shell\sharewareluncher.vrhd");
  132.       RegDeleteKey(HKEY_CLASSES_ROOT,"Drive\shell\sharewareluncher.cancelvrhd");
  133.       MakeUninstallLnk(FALSE);
  134.       DelShortcut();
  135.    }
  136.    else
  137.    {
  138.     MakeUninstallLnk(FALSE);
  139.       MakeUninstallLnk(TRUE);
  140.    }
  141. } void MakeUninstallLnk(BOOL flag) {    char szPath[MAX_PATH];    char szT[300],szS[300],szWinPath[MAX_PATH];    GetCurrentDirectory(MAX_PATH,szPath);    GetWindowsDirectory(szWinPath,MAX_PATH);    if(OSType()==NT)    {     wsprintf(szS,"%s\profiles\all users\「开始」菜单\程序",szWinPath);       if(GetFileAttributes(szS)==0xffffffff)          wsprintf(szS,"%s\profiles\all users\start menu\programs",szWinPath);       strcat(szS,"\共享软件程序发射器");    }    else    wsprintf(szS,"%s\Start Menu\Programs\共享软件程序发射器",szWinPath);    if(flag)    {     MkDir(szS);     wsprintf(szT,"%s\共享软件程序发射器.lnk",szS);       CreateShortcut(cmd,NULL,szPath,szT,"共享软件程序发射器");     wsprintf(szT,"%s\清除发射器设置.lnk",szS);       CreateShortcut(cmd,"/u",szPath,szT,"清除发射器设置");       wsprintf(szT,"%s\sendto\共享软件程序发射器.lnk",szWinPath);     CreateShortcut(cmd,NULL,szPath,szT,"共享软件程序发射器");    }    else    {     wsprintf(szT,"%s\共享软件程序发射器.lnk",szS);       DeleteFile(szT);       wsprintf(szT,"%s\清除发射器设置.lnk",szS);       DeleteFile(szT);       RemoveDirectory(szS);       wsprintf(szS,"%s\sendto\共享软件程序发射器.lnk",szWinPath);    DeleteFile(szS);    } } void Getcmd(void) {    LPSTR xCmdLine;    int i;    xCmdLine=GetCommandLine(); if(xCmdLine[0]=='"')       for(i=0;i<(int)strlen(xCmdLine)-2;i++) {
  142.        if(xCmdLine[i+1]!='"')
  143.     cmd[i]=xCmdLine[i+1];
  144.       else
  145.        {
  146.           cmd[i]='';
  147.         break;
  148.    }
  149. }    else       for(i=0;i<(int)strlen(xCmdLine)-2;i++) {
  150.        if(xCmdLine[i]!=' ' && xCmdLine[i+1]!='-' && xCmdLine[i+1]!='/')
  151.     cmd[i]=xCmdLine[i];
  152.       else
  153.        {
  154.           cmd[i]='';
  155.         break;
  156.    }
  157. } } #pragma argsused BOOL CALLBACK APIENTRY QuitProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { switch(uMsg)    {     case WM_INITDIALOG:          hQuitWnd=hWnd;        CheckRadioButton(hWnd,IDC_QUIT,IDC_FORCEQUIT,IDC_QUIT);          if(OSType()==NT)          {           HWND hw;             hw=GetDlgItem(hWnd,IDHELP);             EnableWindow(hw,FALSE);             hw=GetDlgItem(hWnd,IDC_QUIT);             EnableWindow(hw,FALSE);             hw=GetDlgItem(hWnd,IDC_RESTART);             EnableWindow(hw,FALSE);             hw=GetDlgItem(hWnd,IDC_FORCEQUIT);             EnableWindow(hw,FALSE);             hw=GetDlgItem(hWnd,IDC_QUITSEL);             EnableWindow(hw,FALSE);          }        break;       case WM_COMMAND:        switch(LOWORD(wParam))          {           case IDOK:              EndDialog(hWnd,TRUE);                return TRUE;             case IDCANCEL:                hQuitWnd=NULL;              EndDialog(hWnd,FALSE);                return FALSE;             case IDHELP: //shut down                EndDialog(hWnd,TRUE);              if(IsDlgButtonChecked(hWnd,IDC_QUIT)==BST_CHECKED)                 ExitWindowsEx(EWX_SHUTDOWN,0);                else if(IsDlgButtonChecked(hWnd,IDC_RESTART)==BST_CHECKED)                 ExitWindowsEx(EWX_REBOOT,0);                else if(IsDlgButtonChecked(hWnd,IDC_FORCEQUIT)==BST_CHECKED)                 ExitWindowsEx(EWX_FORCE|EWX_SHUTDOWN,0);                return TRUE;          }          break;       case WM_CLOSE:        hQuitWnd=NULL;        EndDialog(hWnd,FALSE);          return FALSE;    }    return FALSE; } void RemapMenu(void) {
  158. int nItem;
  159.    MENUITEMINFO mi;
  160.    ZeroMemory(&mi,sizeof(mi));
  161.    mi.cbSize=sizeof(mi);
  162.    mi.fMask=MIIM_DATA | MIIM_ID | MIIM_STATE | MIIM_TYPE; nItem = nAppNum;//GetMenuItemCount(hmenuTrackPopup);
  163. while ((--nItem)>=0)
  164. {
  165. GetMenuItemInfo(hmenuTrackPopup,nItem,TRUE,&mi);
  166.       if (mi.wID != 0)
  167. {
  168.        if (!(mi.fState&MF_OWNERDRAW) && !(mi.fState&MF_BITMAP))
  169.          {
  170.             ci[nItem].idx=mi.wID-11000;
  171. ModifyMenu(hmenuTrackPopup,nItem,MF_BYPOSITION|MF_OWNERDRAW|mi.fState, mi.wID, (LPCTSTR)&ci[nItem]);
  172. }
  173.       }
  174. }
  175. } void MeasureItem(LONG lParam) {    LPMEASUREITEMSTRUCT lpm;    //LPCOOLITEM lpci;    lpm=(LPMEASUREITEMSTRUCT)lParam; if(lpm->CtlType == ODT_MENU) {
  176.     lpm->itemWidth=200;
  177.      lpm->itemHeight=20;
  178.      //lpci=(LPCOOLITEM)lpm->itemData;
  179. }
  180. }
  181. void DrawItem(LPDRAWITEMSTRUCT lp)
  182. {
  183.    LPCOOLITEM pItem;
  184. if (lp->CtlType == ODT_MENU)
  185. {
  186.       UINT id = lp->itemID;
  187.       dis=*lp; pItem = (LPCOOLITEM) lp->itemData;
  188. if (pItem)
  189. {
  190.          HDC hDC = lp->hDC;
  191. RECT rc=lp->rcItem,rrc;
  192. //         HFONT hfnt, hOldFont;
  193.          if(id==(UINT)nSel)//wParam)
  194.          {
  195.           rrc=rc;
  196.           rrc.right=rrc.left+20;
  197. if(id>=11000 && id<11050)
  198.             DrawIconEx(hDC,2,rrc.top+2,hicon[pItem->idx],16,16,0,NULL,DI_NORMAL);
  199.           DrawEdge(hDC,&rrc,BDR_RAISEDINNER,BF_RECT);
  200.             SetTextColor(hDC,(COLORREF)(GetSysColor(COLOR_HIGHLIGHTTEXT)));
  201.             SetBkColor(hDC,(COLORREF)(GetSysColor(COLOR_HIGHLIGHT)));
  202.             rc.left+=22;
  203.             FillRect(hDC,&rc,(HBRUSH)(COLOR_HIGHLIGHT+1));
  204. //            hfnt = GetStockObject(DEFAULT_GUI_FONT);
  205. //            hOldFont = SelectObject(hDC, hfnt);
  206. //    if(hOldFont)
  207. //            {
  208. //               TextOut(hDC,rc.left,rc.top,aiAppInfo[pItem->idx].szAppName,strlen(aiAppInfo[pItem->idx].szAppName));
  209.              DrawText(hDC,aiAppInfo[pItem->idx].szAppName,-1,&rc,DT_LEFT|DT_VCENTER|DT_SINGLELINE);
  210. //       SelectObject(hDC, hOldFont);
  211. //    }
  212.          }
  213.          else if(id<11050)
  214.          {
  215.           rrc=rc;
  216.           rrc.right=rrc.left+20;
  217.           FillRect(hDC,&rrc,(HBRUSH)(COLOR_MENU+1));
  218.             if(id>=11000 && id<11050)
  219.             DrawIconEx(hDC,2,rrc.top+2,hicon[pItem->idx],16,16,0,NULL,DI_NORMAL);
  220.          rc.left+=22;
  221.             FillRect(hDC,&rc,(HBRUSH)(COLOR_MENU+1));
  222.             SetBkColor(hDC,(COLORREF)(GetSysColor(COLOR_MENU)));
  223.           DrawText(hDC,aiAppInfo[pItem->idx].szAppName,-1,&rc,DT_LEFT|DT_VCENTER);
  224.          }
  225.       }
  226.    }
  227. } void GetAllIcon(void) { int i;    WORD w=0;    for(i=0;i<nAppNum;i++)    { CutCmdLine(aiAppInfo[i].szAppCmd);       hicon[i]=ExtractAssociatedIcon(hInst,szErr,&w);    } } /* BOOL ViewHTM(LPSTR szHtmFileName) { STARTUPINFO si={0};    PROCESS_INFORMATION pi ;    char szSysPath[MAX_PATH];//,szTemp[100];    si.cb = sizeof( STARTUPINFO) ; si.lpReserved = NULL ;
  228. si.lpDesktop = NULL ;
  229.    si.lpTitle = NULL ;
  230. si.dwX = 0 ;
  231.    si.dwY = 0 ;
  232.    si.dwXSize = 0 ;
  233.    si.dwYSize = 0 ;
  234.    si.dwXCountChars = 0 ;
  235.    si.dwYCountChars = 0 ;
  236.    si.dwFillAttribute = 0 ;
  237.    si.dwFlags = STARTF_USESHOWWINDOW;
  238.    si.wShowWindow = SW_SHOW ;
  239.    si.cbReserved2 = 0 ;
  240.    si.lpReserved2 = NULL ;
  241.    si.hStdInput = NULL;
  242.    si.hStdOutput = NULL;
  243.    si.hStdError = NULL;
  244.     //GetWindowsDirectory(szWinPath,MAX_PATH);
  245.    SetCurrentDirectory("c:\Program Files\Internet Explorer");//\Iexplore.exe");//szWinPath);
  246.    //GetSystemDirectory(szTemp,MAX_PATH);
  247.    wsprintf(szSysPath,"c:\temp\web\001.htm");//control.exe %s\%s",szTemp,szCplName);
  248.    if( !CreateProcess( NULL,//"Iexplore.exe",//szWinPath,
  249. "Iexplore.exe c:\temp\web\001.htm",//szSysPath,//"control.exe c:pwin97systemtimedate.cpl",//szSysPath,
  250.                       (LPSECURITY_ATTRIBUTES)NULL,
  251.                         (LPSECURITY_ATTRIBUTES)NULL,
  252.                         FALSE,
  253.                         NORMAL_PRIORITY_CLASS,
  254.                         NULL,
  255.                         "c:\Program Files\Internet Explorer",//NULL,
  256.                         &si,
  257.                         &pi))
  258.    {    return FALSE;//Errmsg("fail to open 001.htm");    }       return TRUE; } */