⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listview.c

📁 执行和去除共享软件日期限制的程序
💻 C
字号:
#include <user\dlg.h>
#include <stdio.h>
#include <commctrl.h>
#include <string.h>
#include "sharewareluncher.h"
#include "listview.h"
#include "resource.h"
#define MYWM_TIMEUP	(WM_USER+111)

void TransDate(int);
void ListDel(int);
void SortList(void);

extern int Runit(BOOL);
extern void MakeShortcut(void);

extern HWND hAddWnd;
extern BOOL bNoLunch;
extern HINSTANCE	hInst;
extern int nAppNum;
extern APPINFO aiAppInfo[50];
extern HMENU hMenu,hmenuTrackPopup;
extern char szRunCommand[300];
extern BOOL bAddExe,bCreateLink;
extern BOOL bDlgRuned,bSheet;
extern PROPSHEETPAGE * ps;
extern HWND hMainWnd;

HWND hListWnd,hBarWnd;
int nBarPos[]={212,270,-1};
char szerr[100];
BOOL bAnyChanged=FALSE;
int naiIndex=-1;
HWND hListAppWnd;

#pragma argsused
LONG APIENTRY ListWndProc(HWND hWnd,UINT	message,	WPARAM  wParam,LPARAM  lParam)
{
   int i,j;
   REGVALINFO RegInfo[5];
   char szSubKey[256];

	switch (message)
	{
		case WM_INITDIALOG:
         hListAppWnd=hWnd;
         bDlgRuned=TRUE;

         {
         	HWND hItemWnd;

            hItemWnd=GetDlgItem(hWnd,IDC_OK);
         	if(bSheet)
            	ShowWindow(hItemWnd,SW_HIDE);
            else
            	ShowWindow(hItemWnd,SW_SHOW);
         }

			hListWnd=GetDlgItem(hWnd,IDC_LISTAPP);

			for (i=0; i < nAppNum; i++)
			{
      		SendMessage(hListWnd,LB_ADDSTRING,0,(LPARAM)(aiAppInfo[i].szAppName));
            SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[i].szAppName)), (LPARAM) i);
			}

			if (hListWnd == NULL)
				MessageBox (NULL, "加载共享软件程序信息时出错!", "出错", MB_OK );
         SetFocus(hListWnd);

         hBarWnd=GetDlgItem(hWnd,IDC_INFOBAR);
         SendMessage(hBarWnd,SB_SETPARTS,3,(LPARAM)nBarPos);
         SendMessage(hBarWnd,SB_SETTEXT,(1 | 0),(LPARAM)"运行日期");

         if(bSheet)
         {
         	ps = (PROPSHEETPAGE *)lParam;
				return (TRUE);
         }
         if(bAddExe || bCreateLink)
         	SendMessage(hWnd,WM_COMMAND,IDOK,0);
			break;
      case MYWM_TIMEUP:	//临时借用
      	if(bAddExe || bCreateLink)
         {
         	if(hAddWnd==NULL)
	         	SendMessage(hWnd,WM_COMMAND,IDOK,0);
            else
            	SendMessage(hAddWnd,WM_INITDIALOG,0,0);
         }
         break;
      case MYWM_ICON:   //临时借用
	      if(bAnyChanged)
         {
           	bAnyChanged=FALSE;

            SortList();

            for(i=0;i<nAppNum;i++)
            {
              	if(i<10)
              		wsprintf(szSubKey,"SOFTWARE\\phonix\\sharewareluncher\\menuitem00%d",i);
              	else
              		wsprintf(szSubKey,"SOFTWARE\\phonix\\sharewareluncher\\menuitem0%d",i);
	            RegInfo[0].szValName="AppName";
               RegInfo[1].szValName="AppCmdLine";
               RegInfo[2].szValName="Year";
     	         RegInfo[3].szValName="Month";
        	      RegInfo[4].szValName="Day";

           	   RegInfo[0].dwType=REG_SZ;
              	RegInfo[1].dwType=REG_SZ;
	            RegInfo[2].dwType=REG_DWORD;
               RegInfo[3].dwType=REG_DWORD;
               RegInfo[4].dwType=REG_DWORD;

        	      RegInfo[0].lpData=(LPBYTE)&(aiAppInfo[i].szAppName);
           	   RegInfo[1].lpData=(LPBYTE)&(aiAppInfo[i].szAppCmd);
              	RegInfo[2].lpData=(LPBYTE)&(aiAppInfo[i].stVrDate.wYear);
	            RegInfo[3].lpData=(LPBYTE)&(aiAppInfo[i].stVrDate.wMonth);
               RegInfo[4].lpData=(LPBYTE)&(aiAppInfo[i].stVrDate.wDay);

     	         RegInfo[0].cbData=80;
        	      RegInfo[1].cbData=300;
           	   RegInfo[2].cbData=(DWORD)sizeof(DWORD);
              	RegInfo[3].cbData=(DWORD)sizeof(DWORD);
	            RegInfo[4].cbData=(DWORD)sizeof(DWORD);

              	RegSetGroupVal(HKEY_LOCAL_MACHINE,szSubKey,5,RegInfo);
            }
            RemapMenu();
	         GetAllIcon();
         }
         break;
		case WM_COMMAND:
			switch ( LOWORD( wParam ))
			{
            case IDOK:
               if(nAppNum>49)
               {
            		Errmsg("抱歉,你已不能再添加程序");
                  if(bAddExe || bCreateLink)
	               {
   	               if(!bSheet || !bNoLunch)
      	           		SendMessage(hWnd,WM_COMMAND,IDC_OK,0);
         	         else
            	      	bCreateLink=bAddExe=FALSE;
                  }
                  break;
               }
            	if(DialogBox(hInst,MAKEINTRESOURCE(IDD_ADD),hWnd,(DLGPROC)AddDlgProc))
               {
                  MENUITEMINFO mi;

                  bAnyChanged=TRUE;
               	SendMessage(hListWnd,LB_ADDSTRING,0,(LPARAM)aiAppInfo[nAppNum-1].szAppName);
                  SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[nAppNum-1].szAppName)), (LPARAM) (nAppNum-1));

                  mi.cbSize=sizeof(mi);
					   mi.fMask=MIIM_TYPE | MIIM_ID;					   mi.fType=MFT_STRING;					   mi.fState=MFS_DEFAULT;
                  mi.wID=11000+nAppNum-1;
				      mi.dwTypeData=aiAppInfo[nAppNum-1].szAppName;				   	mi.cch=strlen(aiAppInfo[nAppNum-1].szAppName);

               	InsertMenuItem(hmenuTrackPopup,nAppNum-1,TRUE,&mi);
                  if(nAppNum==1)
                  {
                  	mi.fType=MFT_SEPARATOR;
	   					InsertMenuItem(hmenuTrackPopup,CM_SETCLOCK,FALSE,&mi);
                  }
               }
               if(bAddExe || bCreateLink)
               {
                  if(!bSheet || !bNoLunch)
                 		SendMessage(hWnd,WM_COMMAND,IDC_OK,0);
                  else
                  	bCreateLink=bAddExe=FALSE;
               }
               SendMessage(hWnd,MYWM_ICON,0,0);
					break;
            case IDCANCEL:
               i=SendMessage(hListWnd,LB_GETCURSEL,0,0);
               if(i==LB_ERR)
               	break;

               j=SendMessage(hListWnd, LB_GETITEMDATA, i, (LPARAM) 0);
               wsprintf(szerr,"如果删除\"%s\"程序,你将不能通过本软件启动该程序。\n确实要删除吗?",aiAppInfo[j].szAppName);
               if(MessageBox(hWnd,szerr,"确认删除",MB_OKCANCEL | MB_ICONQUESTION)==IDCANCEL)
               	break;
               SendMessage(hListWnd,LB_DELETESTRING,i,0L);
               nAppNum--;
               ListDel(j);
               bAnyChanged=TRUE;
               SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)" ");
              	SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)" ");

               RemoveMenu(hmenuTrackPopup,11000+j,MF_BYCOMMAND);
               if(nAppNum==0)
               	RemoveMenu(hmenuTrackPopup,0,MF_BYPOSITION);
               //DrawMenuBar(hmenuTrackPopup);
               SendMessage(hWnd,MYWM_ICON,0,0);
               break;
            case IDHELP:
            	//ListDel();
               i=SendMessage(hListWnd,LB_GETCURSEL,0,0);
               if(i==LB_ERR)
               	break;
               naiIndex=SendMessage(hListWnd, LB_GETITEMDATA, i, (LPARAM) 0);

               if(DialogBox(hInst,MAKEINTRESOURCE(IDD_ADD),hWnd,(DLGPROC)AddDlgProc))
               {
                  MENUITEMINFO mi;

                  bAnyChanged=TRUE;
                  SendMessage(hListWnd,LB_DELETESTRING,i,0L);
                  SendMessage(hListWnd,LB_ADDSTRING,0,(LPARAM)aiAppInfo[naiIndex].szAppName);
                  SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[naiIndex].szAppName)), (LPARAM) naiIndex);
                  SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)" ");
               	SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)" ");

                  mi.cbSize=sizeof(mi);
					   mi.fMask=MIIM_TYPE | MIIM_ID;					   mi.fType=MFT_STRING;					   mi.fState=MFS_DEFAULT;
                  mi.wID=11000+naiIndex;
				      mi.dwTypeData=aiAppInfo[naiIndex].szAppName;				   	mi.cch=strlen(aiAppInfo[naiIndex].szAppName);

                  SetMenuItemInfo(hmenuTrackPopup,11000+naiIndex,FALSE,&mi);
                  //DrawMenuBar(hmenuTrackPopup);

                  naiIndex=-1;
                  SendMessage(hWnd,MYWM_ICON,0,0);
               }

            	break;
            case IDC_OK:
               SendMessage(hWnd,MYWM_ICON,0,0);
               bDlgRuned=FALSE;
               if(bAddExe)
               {
               	for(i=0;i<nAppNum;i++)
      				{      					if(strcmpi(szRunCommand,aiAppInfo[i].szAppCmd)==0 && !bNoLunch)                     	Lunch(hMainWnd,i);      				}
                  bAddExe=FALSE;
                  bNoLunch=TRUE;
               }
               if(bCreateLink)
               {
               	bCreateLink=FALSE;
               	MakeShortcut();
               }
               if(!bSheet)
               {
	               hListAppWnd=NULL;
   	         	EndDialog(hWnd,TRUE);
               }
               return TRUE;
         }
         switch(HIWORD(wParam))
         {
            case LBN_SELCHANGE:
            	i=SendMessage((HWND)lParam,LB_GETCURSEL,0,0);
               if(i==LB_ERR)
               {
               	SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)" ");
               	SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)" ");
                  break;
               }
               i=SendMessage((HWND)lParam, LB_GETITEMDATA, i, (LPARAM) 0);
               SendMessage(hBarWnd,SB_SETTEXT,(0 | 0),(LPARAM)aiAppInfo[i].szAppCmd);
               TransDate(i);
               SendMessage(hBarWnd,SB_SETTEXT,(2 | 0),(LPARAM)szerr);
               break;
            case LBN_DBLCLK:
            	SendMessage(hWnd,WM_COMMAND,IDHELP,0);
               break;
         }
			break;

		case WM_CLOSE:
			SendMessage(hWnd,MYWM_ICON,0,0);
         bDlgRuned=FALSE;
         bSheet=FALSE;
         hListAppWnd=NULL;
			EndDialog(hWnd,TRUE);
			return TRUE;

      case WM_NOTIFY:
    		switch (((NMHDR FAR *) lParam)->code)
    		{

				case PSN_SETACTIVE:
               bDlgRuned=TRUE;
               bSheet=TRUE;

					SetFocus(hListWnd);

         		break;

				case PSN_APPLY:
					SendMessage(hWnd,MYWM_ICON,0,0);
               bDlgRuned=FALSE;
               bSheet=FALSE;
            	SetWindowLong(hMainWnd, GWL_STYLE, GetWindowLong(hMainWnd,GWL_STYLE));
					ShowWindow(hMainWnd, SW_SHOW);

               SetWindowLong(hWnd,DWL_MSGRESULT, FALSE);
               return TRUE;

				case PSN_KILLACTIVE:
               bSheet=FALSE;
	           	SetWindowLong(hWnd,DWL_MSGRESULT, FALSE);
					return (TRUE);

				case PSN_RESET:
            	bDlgRuned=FALSE;
            	bSheet=FALSE;
					break;

				case PSN_HELP:
					break;
    	}

		default:
			return FALSE;
	}
	return FALSE;
}

void TransDate(int i)
{
	if(aiAppInfo[i].stVrDate.wMonth<10)
   	wsprintf(szerr,"0%d/",aiAppInfo[i].stVrDate.wMonth);
   else
   	wsprintf(szerr,"%d/",aiAppInfo[i].stVrDate.wMonth);

   if(aiAppInfo[i].stVrDate.wDay<10)
   	wsprintf(szerr,"%s0%d/%4d",szerr,aiAppInfo[i].stVrDate.wDay,aiAppInfo[i].stVrDate.wYear);
   else
   	wsprintf(szerr,"%s%d/%4d",szerr,aiAppInfo[i].stVrDate.wDay,aiAppInfo[i].stVrDate.wYear);
	if(aiAppInfo[i].stVrDate.wYear==0 || aiAppInfo[i].stVrDate.wMonth==0 || aiAppInfo[i].stVrDate.wDay==0)
   	wsprintf(szerr,"无");
}

void ListDel(int x)
{
   int i,j;
   char szSubKeyname[256];
   REGVALINFO r;

	for(i=x;i<nAppNum;i++)
   {
   	aiAppInfo[i]=aiAppInfo[i+1];
   }

   if(nAppNum<10)
   	wsprintf(szSubKeyname,"SOFTWARE\\phonix\\sharewareluncher\\menuitem00%d",nAppNum);
   else
   	wsprintf(szSubKeyname,"SOFTWARE\\phonix\\sharewareluncher\\menuitem0%d",nAppNum);

   RegDeleteKey(HKEY_LOCAL_MACHINE,szSubKeyname);

   r.szValName="Num";
	r.dwType=REG_DWORD;
   r.lpData=(LPBYTE)&(nAppNum);
   r.cbData=(DWORD)sizeof(DWORD);

   RegSetGroupVal(HKEY_LOCAL_MACHINE,"SOFTWARE\\phonix\\sharewareluncher",1,&r);

	for(i=0;i<nAppNum;i++)
   {
   	j=SendMessage(hListWnd,LB_GETITEMDATA,i,0L);
      if(j>x)
      	SendMessage(hListWnd,LB_SETITEMDATA,i,(LPARAM)(j-1));
   }
}

void SortList(void)
{
   int i,j,pi[50];
   APPINFO aiTemp,aiSort;
   MENUITEMINFO mi;

	for(i=0;i<nAppNum;i++)
   {
     	pi[i]=SendMessage(hListWnd,LB_GETITEMDATA,i,0L);
   }
   for(i=0;i<nAppNum;i++)
   {
      if(pi[i]!=i)
      {
	     	aiSort=aiAppInfo[pi[i]];
   	   aiTemp=aiAppInfo[i];
      	aiAppInfo[i]=aiSort;
	      aiAppInfo[pi[i]]=aiTemp;
         for(j=0;j<nAppNum;j++)
         {
   	   	if(pi[j]==i)
            	pi[j]=pi[i];
         }
      }
   }

   for(i=0;i<nAppNum;i++)
   {
   	mi.cbSize=sizeof(mi);
		mi.fMask=MIIM_TYPE | MIIM_ID;		mi.fType=MFT_STRING;		mi.fState=MFS_DEFAULT;
      mi.wID=11000+i;
		mi.dwTypeData=aiAppInfo[i].szAppName;		mi.cch=strlen(aiAppInfo[i].szAppName);
      SetMenuItemInfo(hmenuTrackPopup,i,TRUE,&mi);
      SendMessage(hListWnd, LB_SETITEMDATA, SendMessage(hListWnd, LB_FINDSTRING, -1, (LPARAM)(aiAppInfo[i].szAppName)), (LPARAM) i);
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -