www.pudn.com > sharewareluncher.zip > Sharewareluncher.c


#include 
#include 
#include 
#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; 
}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")==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,"\0");
      }
      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,"\0");
            }
         }
      	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) 
           	hmenuTrackPopup = GetSubMenu(hmenu, 0); 
 
         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;
 
    			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;
 
    			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; 
 
               SetForegroundWindow(hWnd); 
               SetActiveWindow(hWnd); 
 
               GetCursorPos(&pt); 
 
        			TrackPopupMenuEx(hmenuTrackPopup, 
                         TPM_LEFTALIGN | TPM_TOPALIGN |     // default values 
                         TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0 
                         TPM_RIGHTBUTTON,                   // Right selection 
                         pt.x, pt.y, 
                         hWnd, 
                         NULL); 
 
        			//DestroyMenu(hmenu); 
    			}
    			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 
                         TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0 
                         TPM_RIGHTBUTTON,                   // Right selection 
                         rc.left, rc.top+25, 
                         hWnd, 
                         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;
 
            GetCursorPos(&pt); 
 
     			TrackPopupMenuEx(hmenuTrackPopup, 
                         TPM_LEFTALIGN | TPM_TOPALIGN |     // default values 
                         TPM_HORIZONTAL | TPM_LEFTBUTTON | // equivalent to 0 
                         TPM_RIGHTBUTTON,                   // Right selection 
                         pt.x, pt.y, 
                         hWnd, 
                         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=0) 
	{ 
		GetMenuItemInfo(hmenuTrackPopup,nItem,TRUE,&mi); 
 
      if (mi.wID != 0) 
		{ 
      	if (!(mi.fState&MF_OWNERDRAW) && !(mi.fState&MF_BITMAP)) 
         { 
            ci[nItem].idx=mi.wID-11000; 
				ModifyMenu(hmenuTrackPopup,nItem,MF_BYPOSITION|MF_OWNERDRAW|mi.fState, mi.wID, (LPCTSTR)&ci[nItem]); 
			} 
      } 
	} 
}


void MeasureItem(LONG lParam)
{
   LPMEASUREITEMSTRUCT lpm;
   //LPCOOLITEM lpci;

   lpm=(LPMEASUREITEMSTRUCT)lParam;

	if(lpm->CtlType == ODT_MENU)
	{ 
   	lpm->itemWidth=200; 
    	lpm->itemHeight=20; 
    	//lpci=(LPCOOLITEM)lpm->itemData; 
	} 
} 
 
void DrawItem(LPDRAWITEMSTRUCT lp) 
{ 
   LPCOOLITEM pItem; 
 
	if (lp->CtlType == ODT_MENU) 
	{ 
      UINT id = lp->itemID; 

      dis=*lp;

		pItem = (LPCOOLITEM) lp->itemData; 
		if (pItem) 
		{ 
         HDC hDC = lp->hDC; 
			RECT rc=lp->rcItem,rrc; 
//         HFONT hfnt, hOldFont; 
 
         if(id==(UINT)nSel)//wParam) 
         { 
         	rrc=rc; 
         	rrc.right=rrc.left+20; 
 
				if(id>=11000 && id<11050) 
	            DrawIconEx(hDC,2,rrc.top+2,hicon[pItem->idx],16,16,0,NULL,DI_NORMAL); 
 
         	DrawEdge(hDC,&rrc,BDR_RAISEDINNER,BF_RECT); 
            SetTextColor(hDC,(COLORREF)(GetSysColor(COLOR_HIGHLIGHTTEXT))); 
            SetBkColor(hDC,(COLORREF)(GetSysColor(COLOR_HIGHLIGHT))); 
            rc.left+=22; 
            FillRect(hDC,&rc,(HBRUSH)(COLOR_HIGHLIGHT+1)); 
 
//            hfnt = GetStockObject(DEFAULT_GUI_FONT); 
//            hOldFont = SelectObject(hDC, hfnt); 
//			   if(hOldFont) 
//            { 
//               TextOut(hDC,rc.left,rc.top,aiAppInfo[pItem->idx].szAppName,strlen(aiAppInfo[pItem->idx].szAppName)); 
            	DrawText(hDC,aiAppInfo[pItem->idx].szAppName,-1,&rc,DT_LEFT|DT_VCENTER|DT_SINGLELINE); 
//			      SelectObject(hDC, hOldFont); 
//			   } 
         } 
         else if(id<11050) 
         { 
         	rrc=rc; 
         	rrc.right=rrc.left+20; 
 
         	FillRect(hDC,&rrc,(HBRUSH)(COLOR_MENU+1)); 
            if(id>=11000 && id<11050) 
	            DrawIconEx(hDC,2,rrc.top+2,hicon[pItem->idx],16,16,0,NULL,DI_NORMAL); 
 
	         rc.left+=22; 
            FillRect(hDC,&rc,(HBRUSH)(COLOR_MENU+1)); 
            SetBkColor(hDC,(COLORREF)(GetSysColor(COLOR_MENU))); 
   	      DrawText(hDC,aiAppInfo[pItem->idx].szAppName,-1,&rc,DT_LEFT|DT_VCENTER); 
         } 
      } 
   } 
}

void GetAllIcon(void)
{
	int i;
   WORD w=0;

   for(i=0;i