📄 send_to_hd.c
字号:
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\0"); } 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]=='\0') return FALSE; for(i=0;i<(int)strlen(szRunCommand);i++) { if(szRunCommand[i]!=' ') szSourceFile[i]=szRunCommand[i]; else { int j; strcat(szSourceFile,"\0\0"); for(j=0;j<(int)strlen(szRunCommand)-i-1;j++) szRunCommand[j]=szRunCommand[i+j+1]; szRunCommand[j]='\0'; szRunCommand[j+1]='\0'; return TRUE; } } if(szRunCommand[i]=='\0') { wsprintf(szRunCommand,"\0\0"); return TRUE; } return FALSE;}void ExpandTree(void){ HTREEITEM hTree; hTree=TreeView_GetRoot(hTreeWnd); if(hTree) TreeView_Expand(hTreeWnd,hTree,TVE_EXPAND);}#pragma argsusedBOOL 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 argsusedBOOL 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -