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

📄 send_to_hd.c

📁 执行和去除共享软件日期限制的程序
💻 C
📖 第 1 页 / 共 4 页
字号:
#include <user\dlg.h>
#include <commctrl.h>#include <shlobj.h>#include "resource.h"#include "sharewareluncher.h"#define DEL_CANCEL		90001//#define IDC_HAND		99999		//hand cursortypedef struct AAA{
	LPITEMIDLIST	lpi;
	LPSHELLFOLDER	lpsfParent;
	LPITEMIDLIST	lpifq;
}TVITEMDATA,*LPTVITEMDATA;
typedef struct _STRRET1{
    UINT uType; // One of the STRRET_* values
    union
    {
        LPWSTR          pOleStr;        // OLESTR that will be freed
        LPSTR           pStr;           // ANSI string that will be freed (needed?)
        UINT            uOffset;        // Offset into SHITEMID
        char            cStr[MAX_PATH]; // Buffer to fill in (ANSI)
    } ;//DUMMYUNIONNAME;
} STRRET1, *LPSTRRET1;typedef struct _FileOp{	UINT uOp;   BOOL bUpdate;   BOOL bNoAsk;   BOOL bNoFolder;}DOFILEOP,*LPDOFILEOP;extern HINSTANCE hInst;extern HWND hMainWnd;extern char szRunCommand[300];extern HBITMAP hbmBkg;HWND hTreeWnd;char szFoldername[MAX_PATH],szDestFolder[MAX_PATH],szShowDest[MAX_PATH];char szSourceFile[MAX_PATH];char szThisFolder[MAX_PATH];	//in listview-IDC_SELECTSEND's dirchar szForCheck[300];	//restore the szRunCommandNM_TREEVIEW *pNmTv=NULL;DOFILEOP dofileop={FO_COPY,FALSE,FALSE,FALSE};BOOL bNoMsg=FALSE;BOOL bDelNoAsk=FALSE;HWND hTypeWnd;HWND hBaseWnd=NULL,hExternWnd=NULL;	//treeview hwnd and sendproc hwndRECT CDestRt;	//change dest folder rect,in SendProc,for text control "目的文件夹"BOOL bInText=FALSE;	//check mouse in text control "目的文件夹"?int nFocused=-1;	//for in listview,if "shift" pressed,record the first item;BOOL CALLBACK WINAPI BrowserProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);BOOL CALLBACK WINAPI MsgProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);BOOL CALLBACK WINAPI SendProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);BOOL CALLBACK WINAPI AskDelProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam);void FillTreeView(HWND hwndTreeView,LPSHELLFOLDER lpsf,LPITEMIDLIST lpifq,	HTREEITEM hParent);BOOL GetName( LPSHELLFOLDER lpsf, LPITEMIDLIST lpi, DWORD dwFlags, LPSTR lpFriendlyName) ;LPITEMIDLIST CopyITEMID( LPMALLOC lpMalloc, LPITEMIDLIST lpi) ;LPITEMIDLIST ConcatPidls( LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) ;
LPITEMIDLIST GetFullyQualPidl( LPSHELLFOLDER lpsf, LPITEMIDLIST lpi) ;void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq,LPTV_ITEM lptvitem);int GetIcon( LPITEMIDLIST lpi, UINT uFlags) ;
UINT GetSize(LPCITEMIDLIST pidl);
LPITEMIDLIST Create(UINT cbSize);
LPITEMIDLIST Next(LPCITEMIDLIST pidl);

int WINAPI BrowseProc( HWND hwnd, UINT msg, LPARAM lParam, LPARAM lpData);
int DelFile(LPSTR szfile);
void DoCopy(void);
void DoSend(void);
void ResetFileOp(void);
BOOL DoCheckCommand(void);
void ExpandTree(void);
void FillList(HWND hWnd);
void FillSend(HWND hWnd,LPSTR szFileType);
LRESULT NotifyHandler( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void InitCol(HWND hWnd);
void AddListview(HWND hWnd,LPSTR szDisplay,int i);
HICON GetFileIcon(LPSTR lpi);
void AddFileType(LPSTR s);

void RestoreCheckCommand(void);	//restore szRunCommand
void UpdateDestFolder(void);		//listview对话框“目的文件夹”

void ChangeShortcut(void)
{	//MessageBox(GetFocus(),"}void DelShortcut(void){	//Errmsg("del link will write later");}void SendToHD(void){	wsprintf(szForCheck,szRunCommand);   if(hBaseWnd==NULL)   {   	if(DialogBox(hInst,MAKEINTRESOURCE(IDD_BROWSER),hMainWnd,(DLGPROC)BrowserProc))   		DoCopy();	   ResetFileOp();   }   else   {   	SetForegroundWindow(hBaseWnd);      SendMessage(hBaseWnd,MYWM_ICON,0,0);   }}#pragma argsusedBOOL CALLBACK WINAPI BrowserProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam){	switch(uMsg)   {   	case WM_INITDIALOG:      	{            HIMAGELIST hImageList;
         	LPSHELLFOLDER lpsf = 0 ;
            SHFILEINFO    sfi;
				HRESULT hr ;

            hBaseWnd=hWnd;

            hTreeWnd=GetDlgItem(hWnd,IDC_LISTALL);

            hImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\",
                                           0,
                                           &sfi,
                                           sizeof(SHFILEINFO),
                                           SHGFI_SYSICONINDEX | SHGFI_SMALLICON) ;

		    	if( hImageList)
        			TreeView_SetImageList(hTreeWnd, hImageList, 0) ;

				hr=SHGetDesktopFolder( &lpsf) ;

				if( SUCCEEDED(hr))
				{
				   TreeView_DeleteAllItems( hTreeWnd);
				   FillTreeView( hTreeWnd, lpsf, NULL, TVI_ROOT) ;
               ExpandTree();
               TreeView_SelectItem(hTreeWnd,TreeView_GetRoot(hTreeWnd));//,TVGN_FIRSTVISIBLE);
				}

				if( lpsf)
					lpsf -> lpVtbl -> Release( lpsf) ;

         }
			break ;      case MYWM_ICON:					//临时借用,该对话框运行时再有"send to sharewareluncher"      	if(hExternWnd!=NULL)			//可更新正运行(如果)的listview对话框内容         {				UpdateDestFolder();         	SetDlgItemText(hExternWnd,IDC_DESTFOLDER,szDestFolder);         	PostMessage(hExternWnd,MYWM_ICON,0,0);         }         break;      case WM_COMMAND:      	switch(LOWORD(wParam))         {         	case IDOK:               if(hExternWnd!=NULL)               {               	SetForegroundWindow(hExternWnd);                  break;               }               hBaseWnd=NULL;            	EndDialog(hWnd,TRUE);               return TRUE;            case IDCANCEL:            	if(hExternWnd!=NULL)               {               	SetForegroundWindow(hExternWnd);                  break;               }               hBaseWnd=NULL;               wsprintf(szDestFolder,"\0");            	EndDialog(hWnd,FALSE);               return FALSE;            case IDHELP:            	if(hExternWnd!=NULL)               {               	SetForegroundWindow(hExternWnd);                  break;               }            	if(DialogBox(hInst,MAKEINTRESOURCE(IDD_SENDTO),hMainWnd,(DLGPROC)SendProc))               	;//Errmsg("wait to complete");//DoCopy();            	break;            case IDC_MOVE:            	if(IsDlgButtonChecked(hWnd,IDC_MOVE)==BST_CHECKED)            	{               	dofileop.uOp=FO_MOVE;                  if(hExternWnd!=NULL)                  	if(IsDlgButtonChecked(hExternWnd,IDC_MOVE)!=BST_CHECKED)                     	CheckDlgButton(hExternWnd,IDC_MOVE,BST_CHECKED);               }               else               {               	dofileop.uOp=FO_COPY;                  if(hExternWnd!=NULL)                  	if(IsDlgButtonChecked(hExternWnd,IDC_MOVE)==BST_CHECKED)                     	CheckDlgButton(hExternWnd,IDC_MOVE,BST_UNCHECKED);               }               break;            case IDC_NOFOLDER:            	if(IsDlgButtonChecked(hWnd,IDC_NOFOLDER)==BST_CHECKED)               {            		dofileop.bNoFolder=TRUE;                  if(hExternWnd!=NULL)                  {                     CheckDlgButton(hExternWnd,IDC_NOFOLDER,BST_CHECKED);                     ShowWindow(GetDlgItem(hExternWnd,IDC_DESTFOLDER),SW_HIDE);							SendMessage(hExternWnd,WM_COMMAND,MAKELONG((WORD)IDC_NEWFOLDER,(WORD)EN_CHANGE),0);                  	ShowWindow(GetDlgItem(hExternWnd,IDC_DESTFOLDER),SW_SHOW);                  }               }               else               {               	dofileop.bNoFolder=FALSE;                  if(hExternWnd!=NULL)                  {                     CheckDlgButton(hExternWnd,IDC_NOFOLDER,BST_UNCHECKED);                     ShowWindow(GetDlgItem(hExternWnd,IDC_DESTFOLDER),SW_HIDE);							SendMessage(hExternWnd,WM_COMMAND,MAKELONG((WORD)IDC_NEWFOLDER,(WORD)EN_CHANGE),0);                     ShowWindow(GetDlgItem(hExternWnd,IDC_DESTFOLDER),SW_SHOW);                  }               }               break;            case IDC_UPDATE:               if(IsDlgButtonChecked(hWnd,IDC_UPDATE)==BST_CHECKED)               {                 	dofileop.bUpdate=TRUE;                  if(hExternWnd!=NULL)                  	if(IsDlgButtonChecked(hExternWnd,IDC_UPDATE)!=BST_CHECKED)                     	CheckDlgButton(hExternWnd,IDC_UPDATE,BST_CHECKED);               }               else               {                 	dofileop.bUpdate=FALSE;                  if(hExternWnd!=NULL)                  	if(IsDlgButtonChecked(hExternWnd,IDC_UPDATE)==BST_CHECKED)                     	CheckDlgButton(hExternWnd,IDC_UPDATE,BST_UNCHECKED);                  break;               }               if(!bNoMsg)               	if(!DialogBox(hInst,MAKEINTRESOURCE(IDD_MSG),hWnd,(DLGPROC)MsgProc))                  {                  	CheckDlgButton(hWnd,IDC_UPDATE,BST_UNCHECKED);                     if(hExternWnd!=NULL)	                  	if(IsDlgButtonChecked(hExternWnd,IDC_UPDATE)==BST_CHECKED)   	                  	CheckDlgButton(hExternWnd,IDC_UPDATE,BST_UNCHECKED);                     dofileop.bUpdate=FALSE;                  }         }         break;      case WM_CLOSE:      	if(hExternWnd!=NULL)          	SendMessage(hExternWnd,WM_CLOSE,0,0);      	hBaseWnd=NULL;      	EndDialog(hWnd,FALSE);         return FALSE;      case WM_NOTIFY:		{
		   NM_TREEVIEW *pnmtv = (NM_TREEVIEW *)lParam;
		   LPTVITEMDATA lptvid ;
		   HRESULT hr ;
		   LPSHELLFOLDER lpsf2 = 0 ;

		   switch( pnmtv -> hdr.code)
			{
				case TVN_SELCHANGED:
				{
               pNmTv=pnmtv;

					lptvid = (LPTVITEMDATA)pnmtv -> itemNew.lParam;

               GetName(lptvid -> lpsfParent, lptvid->lpi, SHGDN_FORPARSING, szFoldername);

               if(szFoldername[1]!=':')
   				{				   	GetWindowsDirectory(szFoldername,MAX_PATH);      				strcat(szFoldername,"\\desktop\0");				   }

               if(hExternWnd!=NULL)
               {
               	UpdateDestFolder();

                  ShowWindow(GetDlgItem(hExternWnd,IDC_DESTFOLDER),SW_HIDE);
						SendMessage(hExternWnd,WM_COMMAND,MAKELONG((WORD)IDC_NEWFOLDER,(WORD)EN_CHANGE),0);
                  ShowWindow(GetDlgItem(hExternWnd,IDC_DESTFOLDER),SW_SHOW);
               }
				}
				break ;

				case TVN_ITEMEXPANDING:
				{
               if( ( pnmtv -> itemNew.state & TVIS_EXPANDEDONCE))
					  break ;

				   lptvid = (LPTVITEMDATA)pnmtv -> itemNew.lParam ;

				   hr=lptvid -> lpsfParent -> lpVtbl -> BindToObject(lptvid -> lpsfParent,
																   lptvid -> lpi,
																   0,
																   &IID_IShellFolder,
																   (LPVOID *)&lpsf2) ;

				   if( SUCCEEDED(hr))
				   {
					  FillTreeView(hTreeWnd,
									   lpsf2,
									   lptvid -> lpifq,
									   pnmtv -> itemNew.hItem) ;
				   }

				   TreeView_SortChildren(hTreeWnd, pnmtv -> itemNew.hItem, FALSE) ;
				}
				break;

				default:
				   break;
         }
      }
   }   return FALSE;}LPITEMIDLIST Next(LPCITEMIDLIST pidl){
   LPSTR lpMem=(LPSTR)pidl;

   lpMem+=pidl -> mkid.cb;

   return (LPITEMIDLIST)lpMem;
}

UINT GetSize(LPCITEMIDLIST pidl)
{
    UINT cbTotal = 0;
    if( pidl)
    {
        cbTotal += sizeof(pidl -> mkid.cb) ;       // Null terminator
        while (pidl -> mkid.cb)
        {
            cbTotal += pidl -> mkid.cb;
            pidl = Next(pidl) ;
        }
    }

    return cbTotal;
}

LPITEMIDLIST Create(UINT cbSize)
{
    LPMALLOC lpMalloc;
    HRESULT  hr;
    LPITEMIDLIST pidl=0;

    hr=SHGetMalloc(&lpMalloc) ;

    if( FAILED(hr))
       return 0;

    pidl=(LPITEMIDLIST)lpMalloc -> lpVtbl -> Alloc(lpMalloc, cbSize) ;

    if( pidl)
        _fmemset(pidl, 0, cbSize) ;      // zero-init for external task   alloc

    if( lpMalloc) lpMalloc -> lpVtbl -> Release(lpMalloc) ;

    return pidl;
}

LPITEMIDLIST ConcatPidls(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
{
    LPITEMIDLIST pidlNew;
    UINT cb1;
    UINT cb2;

    if( pidl1)  //May be NULL
       cb1 = GetSize(pidl1) - sizeof(pidl1 -> mkid.cb) ;
    else
       cb1 = 0;

    cb2 = GetSize(pidl2) ;

    pidlNew = Create(cb1 + cb2) ;
    if( pidlNew)
    {
        if( pidl1)
           memcpy(pidlNew, pidl1, cb1) ;
        memcpy(((LPSTR)pidlNew) + cb1, pidl2, cb2) ;
    }
    return pidlNew;
}

LPITEMIDLIST CopyITEMID(LPMALLOC lpMalloc, LPITEMIDLIST lpi)
{
   LPITEMIDLIST lpiTemp;

   lpiTemp=(LPITEMIDLIST)lpMalloc -> lpVtbl -> Alloc(lpMalloc,
                                                 lpi -> mkid.cb+sizeof(lpi -> mkid.cb)) ;
   CopyMemory((PVOID)lpiTemp, (CONST VOID *)lpi, lpi -> mkid.cb+sizeof(lpi -> mkid.cb)) ;

   return lpiTemp;
}

BOOL GetName(LPSHELLFOLDER lpsf,LPITEMIDLIST  lpi,DWORD dwFlags,LPSTR lpFriendlyName)
{
   BOOL   bSuccess=TRUE;
   STRRET1 str;

   if( lpsf -> lpVtbl -> GetDisplayNameOf(lpsf,lpi,dwFlags,(LPSTRRET)&str)==NOERROR)
   {
      switch (str.uType)
      {
         case STRRET_WSTR:

            WideCharToMultiByte(CP_ACP,                 // CodePage
                                0,		               // dwFlags
                                str.pOleStr,            // lpWideCharStr
                                -1,                     // cchWideChar
                                lpFriendlyName,         // lpMultiByteStr

⌨️ 快捷键说明

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