Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
send_to_hd.c
Package: sharewareluncher.zip [view]
Upload User: sales84
Upload Date: 2007-01-11
Package Size: 864k
Code Size: 48k
Category:
SourceCode/Document
Development Platform:
Visual C++
- #include <userdlg.h>
- #include <commctrl.h> #include <shlobj.h> #include "resource.h" #include "sharewareluncher.h" #define DEL_CANCEL 90001 //#define IDC_HAND 99999 //hand cursor typedef 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 dir char szForCheck[300]; //restore the szRunCommand NM_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 hwnd RECT 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 argsused BOOL 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,""); 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"); }
- 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
- sizeof(lpFriendlyName), // cchMultiByte,
- NULL, // lpDefaultChar,
- NULL) ; // lpUsedDefaultChar
- break;
- case STRRET_OFFSET:
- lstrcpy(lpFriendlyName, (LPSTR)lpi+str.uOffset) ;
- break;
- case STRRET_CSTR:
- lstrcpy(lpFriendlyName, (LPSTR)str.cStr) ;
- break;
- default:
- bSuccess = FALSE;
- break;
- }
- }
- else
- bSuccess = FALSE;
- return bSuccess;
- }
- LPITEMIDLIST GetFullyQualPidl(LPSHELLFOLDER lpsf, LPITEMIDLIST lpi)
- {
- char szBuff[MAX_PATH];
- OLECHAR szOleChar[MAX_PATH];
- LPSHELLFOLDER lpsfDeskTop;
- LPITEMIDLIST lpifq;
- ULONG ulEaten, ulAttribs;
- HRESULT hr;
- if( !GetName(lpsf, lpi, SHGDN_FORPARSING, szBuff))
- return NULL;
- hr=SHGetDesktopFolder(&lpsfDeskTop) ;
- if( FAILED(hr))
- return NULL;
- MultiByteToWideChar(CP_ACP,
- MB_PRECOMPOSED,
- szBuff,
- -1,
- szOleChar,
- sizeof(szOleChar)) ;
- hr=lpsfDeskTop -> lpVtbl -> ParseDisplayName(lpsfDeskTop,
- NULL,
- NULL,
- szOleChar,
- &ulEaten,
- &lpifq,
- &ulAttribs) ;
- lpsfDeskTop -> lpVtbl -> Release(lpsfDeskTop) ;
- if( FAILED(hr))
- return NULL;
- return lpifq;
- }
- int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
- {
- SHFILEINFO sfi;
- SHGetFileInfo((LPCSTR)lpi,
- 0,
- &sfi,
- sizeof(SHFILEINFO),
- uFlags) ;
- return sfi.iIcon;
- }
- HICON GetFileIcon(LPSTR lpi)
- {
- SHFILEINFO sfi;
- SHGetFileInfo((LPCSTR)lpi,
- 0,
- &sfi,
- sizeof(SHFILEINFO),
- SHGFI_ICON) ;
- return sfi.hIcon;
- }
- void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq,
- LPTV_ITEM lptvitem)
- {
- //Note that we don't check the return value here because if GetIcon()
- //fails, then we're in big trouble...
- lptvitem -> iImage = GetIcon(lpifq, SHGFI_PIDL |
- SHGFI_SYSICONINDEX |
- SHGFI_SMALLICON) ;
- lptvitem -> iSelectedImage = GetIcon(lpifq, SHGFI_PIDL |
- SHGFI_SYSICONINDEX |
- SHGFI_SMALLICON |
- SHGFI_OPENICON) ;
- return;
- }
- void FillTreeView( HWND hwndTreeView,
- LPSHELLFOLDER lpsf,
- LPITEMIDLIST lpifq,
- HTREEITEM hParent)
- {
- TV_ITEM tvi; // TreeView Item.
- TV_INSERTSTRUCT tvins; // TreeView Insert Struct.
- HTREEITEM hPrev = NULL; // Previous Item Added.
- LPSHELLFOLDER lpsf2=0;
- LPENUMIDLIST lpe=0;
- LPITEMIDLIST lpi=0,lpifqThisItem;// lpiTemp=0, lpifqThisItem;
- LPTVITEMDATA lptvid=0;
- LPMALLOC lpMalloc=0;
- ULONG ulFetched;
- HRESULT hr;
- char szBuff[256];
- HWND hwnd=GetParent(hwndTreeView) ;
- hr=SHGetMalloc(&lpMalloc) ;
- if( FAILED(hr))
- return;
- SetCapture(GetParent(hwndTreeView)) ;
- SetCursor(LoadCursor(NULL, IDC_WAIT)) ;
- if( SUCCEEDED(hr))
- {
- hr=lpsf -> lpVtbl -> EnumObjects(lpsf,
- hwnd,
- SHCONTF_FOLDERS | SHCONTF_NONFOLDERS|SHCONTF_INCLUDEHIDDEN,
- &lpe) ;
- if( SUCCEEDED(hr))
- {
- while (S_OK==lpe -> lpVtbl -> Next(lpe,
- 1,
- &lpi,
- &ulFetched))
- {
- ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
- lpsf -> lpVtbl -> GetAttributesOf(lpsf, 1, (LPCITEMIDLIST)&lpi, &ulAttrs) ;
- if( ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER))
- {
- if( ulAttrs & SFGAO_FOLDER)
- {
- tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE |
- TVIF_PARAM;
- if( ulAttrs & SFGAO_HASSUBFOLDER)
- {
- tvi.cChildren=1;
- tvi.mask |= TVIF_CHILDREN;
- }
- lptvid = (LPTVITEMDATA)lpMalloc -> lpVtbl -> Alloc(lpMalloc, sizeof(TVITEMDATA)) ;
- if( !lptvid)
- goto Done;
- if( !GetName(lpsf, lpi, SHGDN_NORMAL, szBuff))
- goto Done;
- tvi.pszText = szBuff;
- tvi.cchTextMax = MAX_PATH;
- lpifqThisItem=ConcatPidls(lpifq, lpi) ;
- lptvid -> lpi=CopyITEMID(lpMalloc, lpi) ;
- GetNormalAndSelectedIcons(lpifqThisItem, &tvi) ;
- lptvid -> lpsfParent=lpsf; //Store the parent folders SF
- lpsf -> lpVtbl -> AddRef(lpsf) ;
- if( hParent==TVI_ROOT)
- lptvid -> lpifq=ConcatPidls(lpifq, lpi) ;
- else
- lptvid -> lpifq=GetFullyQualPidl(lpsf, lpi) ;
- tvi.lParam = (LPARAM)lptvid;
- tvins.item = tvi;
- tvins.hInsertAfter = hPrev;
- tvins.hParent = hParent;
- hPrev = TreeView_InsertItem(hwndTreeView, &tvins) ;
- //////the next code expand all item but CD-ROM in Tree view/////////
- //
- //TreeView_Expand(hwndTreeView,hPrev,TVE_TOGGLE);
- //
- /////code end//////////////////////////////////////////////////////
- }
- lpMalloc -> lpVtbl -> Free(lpMalloc, lpifqThisItem) ;
- lpifqThisItem=0;
- }
- lpMalloc -> lpVtbl -> Free(lpMalloc, lpi) ; //Finally, free the pidl that the shell gave us...
- lpi=0;
- }
- }
- }
- else
- return;
- Done:
- ReleaseCapture() ;
- SetCursor( LoadCursor( NULL, IDC_ARROW)) ;
- if( lpe)
- lpe -> lpVtbl -> Release( lpe) ;
- if( lpi && lpMalloc)
- lpMalloc -> lpVtbl -> Free(lpMalloc, lpi) ;
- if( lpifqThisItem && lpMalloc)
- lpMalloc -> lpVtbl -> Free(lpMalloc, lpifqThisItem) ;
- if( lpMalloc)
- lpMalloc -> lpVtbl -> Release(lpMalloc) ;
- } void DoCopy(void) { char s[MAX_PATH]; SHFILEOPSTRUCT shop; BOOL bnouse=FALSE; WIN32_FIND_DATA wfile,wdest; char dst[MAX_PATH]; HANDLE h,hFile; shop.hwnd=hMainWnd; shop.wFunc=dofileop.uOp; shop.pTo=szFoldername; if(dofileop.bNoAsk) shop.fFlags=FOF_NOCONFIRMATION; else shop.fFlags=FOF_ALLOWUNDO; shop.fAnyOperationsAborted=bnouse; shop.hNameMappings=NULL; shop.lpszProgressTitle=NULL; if(szFoldername[1]!=':') { GetWindowsDirectory(szFoldername,MAX_PATH); strcat(szFoldername,"\desktop"); } while(DoCheckCommand()) { if(dofileop.bNoFolder) { if(GetFileAttributes(szSourceFile)==FILE_ATTRIBUTE_DIRECTORY) { ZeroMemory(s,MAX_PATH); wsprintf(s,"%s\*.*",szSourceFile); SetCurrentDirectory(szSourceFile); hFile=FindFirstFile(s,&wfile); while(FindNextFile(hFile,&wfile)) { if(stricmp(wfile.cFileName,"..")==0) continue; ZeroMemory(s,MAX_PATH); wsprintf(s,"%s\",szSourceFile); strcat(s,wfile.cFileName); shop.pFrom=s; if(dofileop.bUpdate) { wsprintf(dst,"%s\%s",shop.pTo,wfile.cFileName); if((h=FindFirstFile(dst,&wdest))!=INVALID_HANDLE_VALUE) { if(memcmp(&wfile.ftLastWriteTime,&wdest.ftLastWriteTime,sizeof(FILETIME))!=0 || wfile.nFileSizeHigh!=wdest.nFileSizeHigh || wfile.nFileSizeLow!=wdest.nFileSizeLow)
- SHFileOperation(&shop);
- }
- else
- SHFileOperation(&shop);
- FindClose(h);
- }
- else
- SHFileOperation(&shop); } FindClose(hFile); continue; } } shop.pFrom=szSourceFile; if(dofileop.bUpdate) { wsprintf(dst,"%s\%s",shop.pTo,wfile.cFileName); if((h=FindFirstFile(dst,&wdest))!=INVALID_HANDLE_VALUE) { if(memcmp(&wfile.ftLastWriteTime,&wdest.ftLastWriteTime,sizeof(FILETIME))!=0 || wfile.nFileSizeHigh!=wdest.nFileSizeHigh || wfile.nFileSizeLow!=wdest.nFileSizeLow)
- SHFileOperation(&shop);
- }
- else
- SHFileOperation(&shop);
- FindClose(h);
- }
- else
- SHFileOperation(&shop); } wsprintf(szRunCommand,szForCheck); } void ResetFileOp(void) { dofileop.uOp=FO_COPY; dofileop.bUpdate=FALSE; dofileop.bNoFolder=FALSE; dofileop.bNoAsk=FALSE; } BOOL DoCheckCommand(void) { int i; ZeroMemory(szSourceFile,MAX_PATH); if(szRunCommand[0]=='') return FALSE; for(i=0;i<(int)strlen(szRunCommand);i++) { if(szRunCommand[i]!=' ') szSourceFile[i]=szRunCommand[i]; else { int j; strcat(szSourceFile,""); for(j=0;j<(int)strlen(szRunCommand)-i-1;j++) szRunCommand[j]=szRunCommand[i+j+1]; szRunCommand[j]=''; szRunCommand[j+1]=''; return TRUE; } } if(szRunCommand[i]=='') { wsprintf(szRunCommand,""); return TRUE; } return FALSE; } void ExpandTree(void) { HTREEITEM hTree; hTree=TreeView_GetRoot(hTreeWnd); if(hTree) TreeView_Expand(hTreeWnd,hTree,TVE_EXPAND); } #pragma argsused BOOL CALLBACK WINAPI MsgProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { switch(uMsg) { case WM_INITDIALOG: break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: if(IsDlgButtonChecked(hWnd,IDC_NOSHOWNEXT)==BST_CHECKED) { REGVALINFO ri; int x=1; ri.szValName="NoMsg"; ri.dwType=REG_DWORD; ri.lpData=(LPBYTE)&x; ri.cbData=sizeof(DWORD); RegSetGroupVal(HKEY_LOCAL_MACHINE,"SOFTWARE\phonix\sharewareluncher",1,&ri); bNoMsg=TRUE; } EndDialog(hWnd,TRUE); return TRUE; case IDCANCEL: EndDialog(hWnd,FALSE); return FALSE; } break; case WM_CLOSE: EndDialog(hWnd,FALSE); return FALSE; } return FALSE; } #pragma argsused BOOL CALLBACK WINAPI AskDelProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { switch(uMsg) { case WM_INITDIALOG: break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: bDelNoAsk=TRUE; EndDialog(hWnd,TRUE); return TRUE; case IDCANCEL: EndDialog(hWnd,FALSE); return FALSE; case IDHELP: bDelNoAsk=FALSE; EndDialog(hWnd,TRUE); return TRUE; } break; case WM_CLOSE: EndDialog(hWnd,FALSE); return FALSE; } return FALSE; } void UpdateDestFolder(void) { char s[MAX_PATH]; ZeroMemory(szDestFolder,MAX_PATH); ZeroMemory(s,MAX_PATH); DoCheckCommand(); if(szRunCommand[0]=='' && (GetFileAttributes(szSourceFile)&FILE_ATTRIBUTE_DIRECTORY)) wsprintf(szDestFolder,szSourceFile); else GetPathFromFileName(szSourceFile,szDestFolder); GetOnlyFilename(szDestFolder,s,SZ_LONGNAME); if(s[1]==':') wsprintf(s,""); RestoreCheckCommand(); if((strlen(szFoldername)+strlen(s))>=MAX_PATH) s[MAX_PATH-strlen(szFoldername)]=''; wsprintf(szDestFolder,szFoldername); if(szFoldername[3]=='') //like c:,so cut the "" szDestFolder[2]=''; strcat(szDestFolder,"\"); strcat(szDestFolder,s); } int DelFile(LPSTR szfile) { if((GetFileAttributes(szfile)&FILE_ATTRIBUTE_DIRECTORY)) { SHFILEOPSTRUCT shop; shop.hwnd=hMainWnd; shop.wFunc=FO_DELETE; shop.pTo=NULL;//szFoldername; if(bDelNoAsk) shop.fFlags=FOF_NOCONFIRMATION; else shop.fFlags=FOF_ALLOWUNDO; shop.fAnyOperationsAborted=FALSE; shop.hNameMappings=NULL; shop.lpszProgressTitle=NULL; shop.pFrom=szfile; SHFileOperation(&shop); return TRUE; } else if(!bDelNoAsk) { char mg[MAX_PATH]; wsprintf(mg,"确实要删除文件"%s"吗?",szfile); switch(MessageBox(GetFocus(),mg,"删除",MB_YESNOCANCEL | MB_ICONQUESTION)) { case IDYES: SetFileAttributes(szfile,FILE_ATTRIBUTE_NORMAL); return DeleteFile(szfile); case IDNO: return FALSE; case IDCANCEL: return DEL_CANCEL; } } SetFileAttributes(szfile,FILE_ATTRIBUTE_NORMAL); return DeleteFile(szfile); } #pragma argsused BOOL CALLBACK WINAPI SendProc(HWND hWnd,UINT uMsg,UINT wParam,LONG lParam) { switch(uMsg) { case WM_INITDIALOG: hExternWnd=hWnd; hTypeWnd=GetDlgItem(hWnd,IDC_FILETYPE); if(dofileop.uOp==FO_MOVE) CheckDlgButton(hWnd,IDC_MOVE,BST_CHECKED); else CheckDlgButton(hWnd,IDC_MOVE,BST_UNCHECKED); if(dofileop.bUpdate) CheckDlgButton(hWnd,IDC_UPDATE,BST_CHECKED); else CheckDlgButton(hWnd,IDC_UPDATE,BST_UNCHECKED); if(dofileop.bNoFolder) CheckDlgButton(hWnd,IDC_NOFOLDER,BST_CHECKED); else CheckDlgButton(hWnd,IDC_NOFOLDER,BST_UNCHECKED); UpdateDestFolder(); if(dofileop.bNoFolder) SetDlgItemText(hWnd,IDC_DESTFOLDER,szFoldername); else SetDlgItemText(hWnd,IDC_DESTFOLDER,szDestFolder); PostMessage(hWnd,MYWM_ICON,0,0); break; case WM_LBUTTONDOWN: if(bInText) if(hBaseWnd!=NULL) { bInText=FALSE; SetFocus(hWnd); SetForegroundWindow(hBaseWnd); } break; case WM_SETCURSOR: if(bInText) SetCursor(LoadCursor(hInst,"IDC_HAND")); else SetCursor(LoadCursor(NULL,IDC_ARROW)); return TRUE; case WM_MOUSEMOVE: GetWindowRect(GetDlgItem(hWnd,IDC_CHANGDEST),&CDestRt); { POINT pt; GetCursorPos(&pt); if(pt.x>CDestRt.left && pt.x<CDestRt.right && pt.y>CDestRt.top && pt.y<CDestRt.bottom) { if(!bInText) { bInText=TRUE; SetDlgItemText(hWnd,IDC_CHANGDEST,"目的文件夹:"); } } else if(bInText) { bInText=FALSE; SetDlgItemText(hWnd,IDC_CHANGDEST,"目的文件夹:"); } } break; case WM_CTLCOLORSTATIC: SetBkColor((HDC)wParam,(COLORREF)(GetSysColor(COLOR_MENU))); if((HWND)lParam==GetDlgItem(hWnd,IDC_CHANGDEST)) if(!bInText) SetTextColor((HDC)wParam,0x00ff0000); else SetTextColor((HDC)wParam,(COLORREF)(GetSysColor(COLOR_HIGHLIGHT))); return (BOOL)GetStockObject(NULL_BRUSH); case MYWM_ICON: //该消息为临时借用,先显示对话框再完成最后的初始化 while(SendMessage(hTypeWnd,CB_GETCOUNT,0,0)>0) SendMessage(hTypeWnd,CB_DELETESTRING,0,0); ListView_DeleteAllItems(GetDlgItem(hWnd,IDC_SELECTSEND)); ImageList_Destroy(ListView_GetImageList(GetDlgItem(hWnd,IDC_SELECTSEND),LVSIL_STATE)); ListView_DeleteAllItems(GetDlgItem(hWnd,IDC_SELECTDEST)); ImageList_Destroy(ListView_GetImageList(GetDlgItem(hWnd,IDC_SELECTDEST),LVSIL_STATE)); FillList(hWnd); SendMessage(hTypeWnd,CB_ADDSTRING,0,(LPARAM)"*.*"); SendMessage(hTypeWnd,CB_SELECTSTRING,0,(LPARAM)"*.*"); ListView_SetCallbackMask(GetDlgItem(hWnd,IDC_SELECTSEND),LVIS_SELECTED); ListView_SetCallbackMask(GetDlgItem(hWnd,IDC_SELECTDEST),LVIS_SELECTED); break; case WM_NOTIFY: return NotifyHandler(hWnd, uMsg, wParam, lParam);
- case WM_COMMAND:
- switch(LOWORD(wParam)) { case IDOK: bInText=FALSE; DoSend(); hExternWnd=NULL; EndDialog(hWnd,TRUE); return TRUE; case IDCANCEL: bInText=FALSE; hExternWnd=NULL; EndDialog(hWnd,FALSE); return FALSE; case IDHELP: //"删除" { HWND hDest=GetDlgItem(hWnd,IDC_SELECTDEST); int i,k,j=ListView_GetItemCount(hDest),c=0,ch; if(j==0) break; if(DialogBox(hInst,MAKEINTRESOURCE(IDD_ASKDEL),hWnd,(DLGPROC)AskDelProc)) { char szd[MAX_PATH]; for(i=0;i<j;i++) { ListView_GetItemText(hDest,c,0,szd,MAX_PATH); if(szd[0]==' ') { for(k=0;k<(int)(strlen(szd)-1);k++) szd[k]=szd[k+1]; szd[k]=''; } ch=DelFile(szd); if(ch==DEL_CANCEL) break; else if(ch==FALSE) { c++; continue; } ListView_DeleteItem(hDest,c); } ListView_SetColumnWidth(hDest,0,LVSCW_AUTOSIZE); SendMessage(hWnd,MYWM_ICON,0,0); //SendMessage(hTypeWnd,CB_GETLBTEXT,SendMessage(hTypeWnd,CB_GETCURSEL,0,0),(LPARAM)szd); //ImageList_Destroy(ListView_GetImageList(GetDlgItem(hWnd,IDC_SELECTSEND),LVSIL_STATE)); //FillSend(GetDlgItem(hWnd,IDC_SELECTSEND),szd); } } break; case IDC_ADDSELECT: case IDC_DELSELECT: { int i,j; HWND hSel,hDest; char szd[MAX_PATH]; if(LOWORD(wParam)==IDC_ADDSELECT) { hSel=GetDlgItem(hWnd,IDC_SELECTSEND); hDest=GetDlgItem(hWnd,IDC_SELECTDEST); } else { hDest=GetDlgItem(hWnd,IDC_SELECTSEND); hSel=GetDlgItem(hWnd,IDC_SELECTDEST); } j=ListView_GetItemCount(hSel); for(i=0;i<j;i++) { if((ListView_GetItemState(hSel,i,LVIF_STATE)&LVIS_DROPHILITED)) { ListView_GetItemText(hSel,i,0,szd,MAX_PATH); AddListview(hDest,szd,ListView_GetItemCount(hDest)); ListView_DeleteItem(hSel,i); ListView_SetColumnWidth(hSel,0,LVSCW_AUTOSIZE); j--; i--; } } } break; case IDC_ADDALL: case IDC_DELALL: { int i,j; HWND hSel,hDest; char szd[MAX_PATH]; if(LOWORD(wParam)==IDC_ADDALL) { hSel=GetDlgItem(hWnd,IDC_SELECTSEND); hDest=GetDlgItem(hWnd,IDC_SELECTDEST); } else { hDest=GetDlgItem(hWnd,IDC_SELECTSEND); hSel=GetDlgItem(hWnd,IDC_SELECTDEST); } j=ListView_GetItemCount(hSel); for(i=0;i<j;i++) { ListView_GetItemText(hSel,0,0,szd,MAX_PATH); AddListview(hDest,szd,ListView_GetItemCount(hDest)); ListView_DeleteItem(hSel,0); ListView_SetColumnWidth(hSel,0,LVSCW_AUTOSIZE); } } break; case IDC_MOVE: if(IsDlgButtonChecked(hWnd,IDC_MOVE)==BST_CHECKED) { dofileop.uOp=FO_MOVE; if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_MOVE,BST_CHECKED); } else { dofileop.uOp=FO_COPY; if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_MOVE,BST_UNCHECKED); } break; case IDC_NOFOLDER: if(IsDlgButtonChecked(hWnd,IDC_NOFOLDER)==BST_CHECKED) { dofileop.bNoFolder=TRUE; if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_NOFOLDER,BST_CHECKED); } else { dofileop.bNoFolder=FALSE; if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_NOFOLDER,BST_UNCHECKED); } ShowWindow(GetDlgItem(hWnd,IDC_DESTFOLDER),SW_HIDE); SendMessage(hWnd,WM_COMMAND,MAKELONG((WORD)IDC_NEWFOLDER,(WORD)EN_CHANGE),0); ShowWindow(GetDlgItem(hWnd,IDC_DESTFOLDER),SW_SHOW); break; case IDC_UPDATE: if(IsDlgButtonChecked(hWnd,IDC_UPDATE)==BST_CHECKED) { dofileop.bUpdate=TRUE; if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_UPDATE,BST_CHECKED); } else { dofileop.bUpdate=FALSE; if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_UPDATE,BST_UNCHECKED); break; } if(!bNoMsg) if(!DialogBox(hInst,MAKEINTRESOURCE(IDD_MSG),hWnd,(DLGPROC)MsgProc)) { CheckDlgButton(hWnd,IDC_UPDATE,BST_UNCHECKED); if(hBaseWnd!=NULL) CheckDlgButton(hBaseWnd,IDC_UPDATE,BST_UNCHECKED); dofileop.bUpdate=FALSE; } break; } switch(HIWORD(wParam)) { case CBN_SELCHANGE: { char ext[80]; SendMessage(hTypeWnd,CB_GETLBTEXT,SendMessage(hTypeWnd,CB_GETCURSEL,0,0),(LPARAM)ext); ListView_DeleteAllItems(GetDlgItem(hWnd,IDC_SELECTSEND)); ImageList_Destroy(ListView_GetImageList(GetDlgItem(hWnd,IDC_SELECTSEND),LVSIL_STATE)); FillSend(GetDlgItem(hWnd,IDC_SELECTSEND),ext); } break; case EN_CHANGE: if((int)LOWORD(wParam)==IDC_NEWFOLDER) { char s[80]; int i; ZeroMemory(szShowDest,MAX_PATH); ZeroMemory(s,80); GetDlgItemText(hWnd,IDC_NEWFOLDER,s,80); for(i=0;i<80;i++) if(s[i]=='*' || s[i]=='?' || s[i]==':' || s[i]=='/' || s[i]=='"' || s[i]=='<' || s[i]=='>') { Errmsg("非法字符串"); s[i]=''; SetDlgItemText(hWnd,IDC_NEWFOLDER,s); break; } if(dofileop.bNoFolder) { if((strlen(szFoldername)+strlen(s))>=MAX_PATH) s[MAX_PATH-strlen(szFoldername)]=''; wsprintf(szShowDest,"%s\%s",szFoldername,s); } else { if((strlen(szDestFolder)+strlen(s))>=MAX_PATH) s[MAX_PATH-strlen(szDestFolder)]=''; wsprintf(szShowDest,"%s\%s",szDestFolder,s); } SetDlgItemText(hWnd,IDC_DESTFOLDER,szShowDest); } break; } break; case WM_CLOSE: bInText=FALSE; hExternWnd=NULL; EndDialog(hWnd,FALSE); return FALSE; } return FALSE; } void FillList(HWND hWnd) { int i=0; DoCheckCommand(); InitCol(GetDlgItem(hWnd,IDC_SELECTSEND)); //init listview column InitCol(GetDlgItem(hWnd,IDC_SELECTDEST)); ZeroMemory(szThisFolder,MAX_PATH); if(szRunCommand[0]=='') //仅一个目录或文件 { if((GetFileAttributes(szSourceFile)&FILE_ATTRIBUTE_DIRECTORY)) { wsprintf(szThisFolder,szSourceFile); if(szThisFolder[3]=='') szThisFolder[2]=''; FillSend(GetDlgItem(hWnd,IDC_SELECTSEND),NULL); wsprintf(szRunCommand,szForCheck); SetCurrentDirectory(szSourceFile); return; } } GetPathFromFileName(szSourceFile,szThisFolder); if(szThisFolder[2]=='') { szThisFolder[2]='\'; szThisFolder[3]=''; SetCurrentDirectory(szThisFolder); szThisFolder[2]=''; } else SetCurrentDirectory(szThisFolder); do{ AddListview(GetDlgItem(hWnd,IDC_SELECTDEST),szSourceFile,i); AddFileType(szSourceFile); i++; }while(DoCheckCommand()); ListView_SetColumnWidth(GetDlgItem(hWnd,IDC_SELECTDEST),0,LVSCW_AUTOSIZE); if(szThisFolder[3]=='') szThisFolder[2]=''; FillSend(GetDlgItem(hWnd,IDC_SELECTSEND),NULL); RestoreCheckCommand(); } void RestoreCheckCommand(void) { wsprintf(szRunCommand,szForCheck); } void FillSend(HWND hWnd,LPSTR szFileType) { HANDLE hFile; WIN32_FIND_DATA wfile; char s[MAX_PATH]; HIMAGELIST hIList; LV_FINDINFO lvf; HICON hicon1; LV_ITEM lvi; int i=0; BOOL bSpac=FALSE; char temp[80]; ZeroMemory(s,MAX_PATH); ZeroMemory(&lvf,sizeof(LV_FINDINFO)); lvf.flags=LVFI_STRING; if(szFileType!=NULL) { if(strcmpi(szFileType,"文件夹")==0 || strcmpi(szFileType,"无扩展名文件")==0) { wsprintf(s,"%s\*.*",szThisFolder); bSpac=TRUE; } else wsprintf(s,"%s\%s",szThisFolder,szFileType); } else wsprintf(s,"%s\*.*",szThisFolder); if(szThisFolder[2]=='') { szThisFolder[2]='\'; szThisFolder[3]=''; SetCurrentDirectory(szThisFolder); szThisFolder[2]=''; } else SetCurrentDirectory(szThisFolder); hIList = ImageList_Create(16,16,ILC_MASK,1,1);//GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON) hFile=FindFirstFile(s,&wfile); do { if(stricmp(wfile.cFileName,"..")==0 || stricmp(wfile.cFileName,".")==0) continue; if(bSpac) if(strcmpi(szFileType,"文件夹")==0) { if(!(wfile.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)) continue; } else if(GetFileTypeName(wfile.cFileName,temp)!=TYPE_NOEXT) continue; if((wfile.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)) {
- char x[MAX_PATH];
- wsprintf(x," %s",wfile.cFileName);
- lvi.pszText = x;
- }
- else
- lvi.pszText = wfile.cFileName;//LPSTR_TEXTCALLBACK; lvf.psz=(LPCTSTR)lvi.pszText; if(ListView_FindItem(GetDlgItem(hExternWnd,IDC_SELECTDEST),-1,&lvf)!=-1) continue; hicon1=GetFileIcon(wfile.cFileName); ImageList_AddIcon(hIList,hicon1); ListView_SetImageList(hWnd,hIList,LVSIL_SMALL); lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; lvi.state = 0;
- lvi.stateMask = 0;
- lvi.iItem = i;
- lvi.iSubItem = 0;
- lvi.cchTextMax = MAX_PATH;
- lvi.iImage = i;
- lvi.lParam = (LPARAM)&wfile;
- i++;
- ListView_InsertItem(hWnd,&lvi);
- AddFileType(wfile.cFileName);
- }while(FindNextFile(hFile,&wfile)); FindClose(hFile); ListView_SetColumnWidth(hWnd,0,LVSCW_AUTOSIZE); } #pragma argsused LRESULT NotifyHandler( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- POINT pt;
- LPNMHDR lphdr=(LPNMHDR)lParam;
- LV_HITTESTINFO lvhti ;
- switch(lphdr->code)
- {
- case NM_KILLFOCUS:
- nFocused=-1;
- break;
- case NM_CLICK:
- {
- GetCursorPos( &pt) ;
- ScreenToClient(lphdr->hwndFrom, &pt) ;
- lvhti.pt=pt;
- ListView_HitTest(lphdr->hwndFrom, &lvhti) ;
- if(lvhti.flags & LVHT_ONITEM)
- {
- if((HIBYTE(GetKeyState(VK_SHIFT))&1) && nFocused!=-1)
- {
- int i,j=ListView_GetItemCount(lphdr->hwndFrom);
- BOOL bIn=FALSE;
- for(i=0;i<j;i++)
- {
- if(i!=nFocused && i!=lvhti.iItem)
- {
- if(bIn)
- {
- ListView_SetItemState(lphdr->hwndFrom,i,LVIS_DROPHILITED,LVIF_STATE);
- }
- else
- ListView_SetItemState(lphdr->hwndFrom,i,0,LVIF_STATE);
- }
- else
- {
- ListView_SetItemState(lphdr->hwndFrom,i,LVIS_DROPHILITED,LVIF_STATE);
- bIn=!bIn;
- if(nFocused==lvhti.iItem)
- bIn=FALSE;
- }
- }
- }
- else
- {
- if((ListView_GetItemState(lphdr->hwndFrom,lvhti.iItem,LVIF_STATE)&LVIS_DROPHILITED))
- {
- ListView_SetItemState(lphdr->hwndFrom,lvhti.iItem,0,LVIF_STATE);
- }
- else
- {
- ListView_SetItemState(lphdr->hwndFrom,lvhti.iItem,LVIS_DROPHILITED,LVIF_STATE);
- }
- nFocused=lvhti.iItem;
- }
- }
- }
- break;
- }
- return 0L;
- } void InitCol(HWND hWnd) { LV_COLUMN lvC; lvC.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvC.fmt = LVCFMT_LEFT; // 列元左对齐
- lvC.cx = 86; // 列元的像素宽度
- lvC.pszText = "File";//szText; // 列元的文字字符串地址
- lvC.iSubItem = 0;
- ListView_InsertColumn(hWnd,0,&lvC); } void AddListview(HWND hWnd,LPSTR szDisplay,int i) { WIN32_FIND_DATA wfile; HIMAGELIST hIList; HICON hicon1; LV_ITEM lvi; if(szDisplay[0]==' ') { int w=0; while(szDisplay[w+1]!='') { szDisplay[w]=szDisplay[w+1]; w++; } szDisplay[w]=''; } FindFirstFile(szDisplay,&wfile); hIList = ListView_GetImageList(hWnd,LVSIL_SMALL); if(hIList==NULL) hIList=ImageList_Create(16,16,ILC_MASK,1,1); hicon1=GetFileIcon(szDisplay);//,&dwtemp);//wfile.cFileName,0); ImageList_AddIcon(hIList,hicon1); ListView_SetImageList(hWnd,hIList,LVSIL_SMALL); // DestroyIcon(hicon1); lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; lvi.state = 0;
- lvi.stateMask = 0;
- lvi.iItem = i;
- lvi.iSubItem = 0;
- if((wfile.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
- {
- char x[MAX_PATH];
- wsprintf(x," %s",wfile.cFileName);
- lvi.pszText = x;
- }
- else
- lvi.pszText = wfile.cFileName;//LPSTR_TEXTCALLBACK;
- lvi.cchTextMax = MAX_PATH;
- lvi.iImage = ImageList_GetImageCount(hIList)-1;
- lvi.lParam = (LPARAM)&wfile;
- ListView_InsertItem(hWnd,&lvi);
- ListView_SetColumnWidth(hWnd,0,LVSCW_AUTOSIZE); } void AddFileType(LPSTR s) { char sztype[80]; int i,j,k=0;
- char str[80];
- if((GetFileAttributes(s)&FILE_ATTRIBUTE_DIRECTORY))
- wsprintf(sztype,"文件夹");
- else
- GetFileTypeName(s,sztype);
- if(sztype[0]=='') wsprintf(sztype,"无扩展名文件"); j=SendMessage(hTypeWnd,CB_GETCOUNT,0,0); for(i=0;i<j;i++) { SendMessage(hTypeWnd,CB_GETLBTEXT,i,(LPARAM)str); if(strcmpi(str,sztype)==0) { k++; break; } } if(k==0) SendMessage(hTypeWnd,CB_ADDSTRING,0,(LPARAM)sztype); } void DoSend(void) { char s[MAX_PATH],d[MAX_PATH]; SHFILEOPSTRUCT shop; BOOL bnouse=FALSE; WIN32_FIND_DATA wfile,wdest; char dst[MAX_PATH]; HANDLE h;//,hFile; HWND hDest=GetDlgItem(hExternWnd,IDC_SELECTDEST); int i,k,j=ListView_GetItemCount(hDest),c=0,l; char szSend[MAX_PATH]; if(j==0) return; shop.hwnd=hMainWnd; shop.wFunc=dofileop.uOp; if(dofileop.bNoAsk) shop.fFlags=FOF_NOCONFIRMATION; else shop.fFlags=FOF_ALLOWUNDO; shop.fAnyOperationsAborted=bnouse; shop.hNameMappings=NULL; shop.lpszProgressTitle=NULL; ZeroMemory(d,MAX_PATH); GetDlgItemText(hExternWnd,IDC_DESTFOLDER,d,MAX_PATH); if(strlen(d)>0) if(d[strlen(d)-1]=='\') d[strlen(d)-1]=''; MkDir(d); shop.pTo=d; ZeroMemory(s,MAX_PATH); for(i=0;i<j;i++) { ZeroMemory(szSend,MAX_PATH); ListView_GetItemText(hDest,i,0,szSend,MAX_PATH); if(szSend[0]==' ') { for(k=0;k<(int)(strlen(szSend)-1);k++) szSend[k]=szSend[k+1]; szSend[k]=''; } /* if(dofileop.bNoFolder) { if(GetFileAttributes(szSend)==FILE_ATTRIBUTE_DIRECTORY) { ZeroMemory(s,MAX_PATH); wsprintf(s,"%s\*.*",szSend); SetCurrentDirectory(szSend); hFile=FindFirstFile(s,&wfile); while(FindNextFile(hFile,&wfile)) { if(stricmp(wfile.cFileName,"..")==0) continue; ZeroMemory(s,MAX_PATH); wsprintf(s,"%s\",szSend); strcat(s,wfile.cFileName); shop.pFrom=s; if(dofileop.bUpdate) { wsprintf(dst,"%s\%s",shop.pTo,wfile.cFileName); if((h=FindFirstFile(dst,&wdest))!=INVALID_HANDLE_VALUE) { if(memcmp(&wfile.ftLastWriteTime,&wdest.ftLastWriteTime,sizeof(FILETIME))!=0 || wfile.nFileSizeHigh!=wdest.nFileSizeHigh || wfile.nFileSizeLow!=wdest.nFileSizeLow)
- SHFileOperation(&shop);
- }
- else
- SHFileOperation(&shop);
- FindClose(h);
- }
- else
- SHFileOperation(&shop); } FindClose(hFile); continue; } } */ if((strlen(szSend)+c)<MAX_PATH-4) { if(dofileop.bUpdate) { wsprintf(dst,"%s\%s",shop.pTo,szSend); if((h=FindFirstFile(dst,&wdest))!=INVALID_HANDLE_VALUE) { if(memcmp(&wfile.ftLastWriteTime,&wdest.ftLastWriteTime,sizeof(FILETIME))==0 && wfile.nFileSizeHigh==wdest.nFileSizeHigh && wfile.nFileSizeLow==wdest.nFileSizeLow)
- {
- FindClose(h);
- continue;//SHFileOperation(&shop);
- }
- }
- else
- {
- FindClose(h);
- continue;
- }
- FindClose(h);
- }
- for(l=0;l<(int)strlen(szSend);l++) { s[c]=szSend[l]; c++; } s[c]=''; c++; continue; } else { s[c]=''; shop.pFrom=s; SHFileOperation(&shop); ZeroMemory(s,MAX_PATH); c=0; for(l=0;l<(int)strlen(szSend);l++) { s[c]=szSend[l]; c++; } s[c]=''; c++; continue; } } s[c]=''; shop.pFrom=s; SHFileOperation(&shop); }