刷新IE收藏夹图标

时间:2021-07-08 06:33:05
  原文链接: FavIconizer

刷新IE收藏夹图标 

遍历文件夹工具类:

刷新IE收藏夹图标class  CDirFileList :  public  CStringArray 
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标
public:
刷新IE收藏夹图标    CDirFileList();
刷新IE收藏夹图标
刷新IE收藏夹图标刷新IE收藏夹图标    
/**
刷新IE收藏夹图标     * fills the array with all files found in the given directory.
刷新IE收藏夹图标     * \param dirName the path to the directory on which the files shall be looked for
刷新IE收藏夹图标     * \param recurse TRUE if you want to recurse into subdirectories
刷新IE收藏夹图标     * \param includeDirs TRUE if you want to add directories to the array too
刷新IE收藏夹图标     
*/

刷新IE收藏夹图标    
void BuildList(const CString dirName, const BOOL recurse, const BOOL includeDirs);
刷新IE收藏夹图标}
;
刷新IE收藏夹图标
刷新IE收藏夹图标CDirFileList::CDirFileList()
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标   SetSize(
0,50);
刷新IE收藏夹图标}

刷新IE收藏夹图标
刷新IE收藏夹图标
void  CDirFileList::BuildList( const  CString dirName,  const  BOOL recurse,  const  BOOL includeDirs)
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标    CFileFind finder;
刷新IE收藏夹图标    BOOL working 
= finder.FindFile(dirName+_T("\\*.*"));
刷新IE收藏夹图标    
while (working)
刷新IE收藏夹图标刷新IE收藏夹图标    
{
刷新IE收藏夹图标        working 
= finder.FindNextFile();
刷新IE收藏夹图标        
//skip "." and ".."
刷新IE收藏夹图标
        if (finder.IsDots())
刷新IE收藏夹图标            
continue;
刷新IE收藏夹图标
刷新IE收藏夹图标        
//if its a directory then recurse
刷新IE收藏夹图标
        if (finder.IsDirectory())
刷新IE收藏夹图标刷新IE收藏夹图标        
{//是文件夹
刷新IE收藏夹图标
            if (includeDirs)
刷新IE收藏夹图标刷新IE收藏夹图标            
{//若结果要求保存文件夹
刷新IE收藏夹图标
                Add(finder.GetFilePath());
刷新IE收藏夹图标            }

刷新IE收藏夹图标            
if (recurse)
刷新IE收藏夹图标刷新IE收藏夹图标            
{//递归下一层
刷新IE收藏夹图标
                BuildList(finder.GetFilePath(), recurse, includeDirs);
刷新IE收藏夹图标            }

刷新IE收藏夹图标        }
 // if (finder.IsDirectory())
刷新IE收藏夹图标
        else
刷新IE收藏夹图标刷新IE收藏夹图标        
{//是文件
刷新IE收藏夹图标
            Add(finder.GetFilePath());
刷新IE收藏夹图标        }

刷新IE收藏夹图标    }
 // while (working)
刷新IE收藏夹图标
    finder.Close();
刷新IE收藏夹图标}

刷新IE收藏夹图标

判断是否是图标文件:

刷新IE收藏夹图标typedef  struct  tagICONDIRENTRY
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标    BYTE  bWidth;
刷新IE收藏夹图标    BYTE  bHeight;
刷新IE收藏夹图标    BYTE  bColorCount;
刷新IE收藏夹图标    BYTE  bReserved;
刷新IE收藏夹图标    WORD  wPlanes;
刷新IE收藏夹图标    WORD  wBitCount;
刷新IE收藏夹图标    DWORD dwBytesInRes;
刷新IE收藏夹图标    DWORD dwImageOffset;
刷新IE收藏夹图标}
 ICONDIRENTRY;
刷新IE收藏夹图标
刷新IE收藏夹图标typedef 
struct  ICONHEADER
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标    WORD          idReserved;
刷新IE收藏夹图标    WORD          idType;
刷新IE收藏夹图标    WORD          idCount;
刷新IE收藏夹图标    ICONDIRENTRY  idEntries[
1];
刷新IE收藏夹图标}
 ICONHEADER;
刷新IE收藏夹图标BOOL CFavIconizerDlg::IsIconOrBmp(BYTE
*  pBuffer, DWORD dwLen)
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标    
// Quick and dirty check to see if we actually got
刷新IE收藏夹图标    
// an icon or a bitmap
刷新IE收藏夹图标
    ICONHEADER*            pIconHeader = (ICONHEADER*) pBuffer;
刷新IE收藏夹图标    ICONDIRENTRY
*        pIconEntry = (ICONDIRENTRY*) (pBuffer + sizeof(WORD) * 3);
刷新IE收藏夹图标    BITMAPFILEHEADER
*    pBmpHeader = (BITMAPFILEHEADER*) pBuffer;
刷新IE收藏夹图标
刷新IE收藏夹图标    
if ((pIconHeader->idType == 1)
刷新IE收藏夹图标        
&&
刷新IE收藏夹图标        (pIconHeader
->idReserved == 0)
刷新IE收藏夹图标        
&& 
刷新IE收藏夹图标        (dwLen 
>= sizeof(ICONHEADER) + sizeof(ICONDIRENTRY)) )
刷新IE收藏夹图标刷新IE收藏夹图标    
{
刷新IE收藏夹图标        
if (pIconEntry->dwImageOffset >= dwLen)
刷新IE收藏夹图标            
goto checkifbmp;
刷新IE收藏夹图标
刷新IE收藏夹图标        
return TRUE;
刷新IE收藏夹图标    }

刷新IE收藏夹图标
刷新IE收藏夹图标    
// Not an icon
刷新IE收藏夹图标
checkifbmp:
刷新IE收藏夹图标
刷新IE收藏夹图标    BITMAPFILEHEADER
* pBmpFileHeader = (BITMAPFILEHEADER*) pBuffer;
刷新IE收藏夹图标    BITMAPINFOHEADER
* pBmpInfoHeader = (BITMAPINFOHEADER*) (pBuffer + sizeof(BITMAPFILEHEADER));
刷新IE收藏夹图标
刷新IE收藏夹图标    
if ((dwLen < sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER))
刷新IE收藏夹图标        
||
刷新IE收藏夹图标        (pBmpFileHeader
->bfType != BM)
刷新IE收藏夹图标        
||
刷新IE收藏夹图标        (pBmpFileHeader
->bfSize != dwLen))
刷新IE收藏夹图标        
return FALSE;
刷新IE收藏夹图标
刷新IE收藏夹图标    
return TRUE;
刷新IE收藏夹图标}

刷新IE收藏夹图标

刷新IE收藏夹图标:

刷新IE收藏夹图标
刷新IE收藏夹图标DWORD CFavIconizerDlg::ThreadMethod()
刷新IE收藏夹图标刷新IE收藏夹图标
{
刷新IE收藏夹图标    
//Initialise the OLE subsystem
刷新IE收藏夹图标
    HRESULT hRes = ::CoInitialize(NULL);
刷新IE收藏夹图标    CString result;
刷新IE收藏夹图标    
int nIcons = 0;
刷新IE收藏夹图标    
if (!SUCCEEDED(hRes))
刷新IE收藏夹图标刷新IE收藏夹图标    
{
刷新IE收藏夹图标        MessageBox(_T(
"Failed to initialize OLE!"), _T("Error"), MB_OK | MB_ICONEXCLAMATION);
刷新IE收藏夹图标        
return 1;
刷新IE收藏夹图标    }
 // if (!SUCCEEDED(hRes))
刷新IE收藏夹图标
    GetDlgItem(IDOK)->SetWindowText(_T("Abort"));
刷新IE收藏夹图标    
//first get the favorites folder of the current user
刷新IE收藏夹图标
    TCHAR buf[MAX_PATH];
刷新IE收藏夹图标    
//获取“收藏夹”路径
刷新IE收藏夹图标
    if (!SHGetSpecialFolderPath(this->m_hWnd, buf, CSIDL_FAVORITES, FALSE))
刷新IE收藏夹图标刷新IE收藏夹图标    
{
刷新IE收藏夹图标        
//no favorites folder?
刷新IE收藏夹图标
        MessageBox(_T("could not locate your favorites folder!"), _T("Error"), MB_OK | MB_ICONEXCLAMATION);
刷新IE收藏夹图标        ::CoUninitialize();
刷新IE收藏夹图标        GetDlgItem(IDOK)
->SetWindowText(_T("OK"));
刷新IE收藏夹图标        GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("finished!"));
刷新IE收藏夹图标        GetDlgItem(IDC_LINKPATH)
->SetWindowText(_T(""));
刷新IE收藏夹图标        UpdateData(FALSE);
刷新IE收藏夹图标        
return 1;
刷新IE收藏夹图标    }

刷新IE收藏夹图标    CString sFavPath 
= CString(buf);
刷新IE收藏夹图标    
if (!SetCurrentDirectory(sFavPath))
刷新IE收藏夹图标刷新IE收藏夹图标    
{
刷新IE收藏夹图标        MessageBox(_T(
"could not set the current directory!"), _T("Error"), MB_OK | MB_ICONEXCLAMATION);
刷新IE收藏夹图标        ::CoUninitialize();
刷新IE收藏夹图标        GetDlgItem(IDOK)
->SetWindowText(_T("OK"));
刷新IE收藏夹图标        GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("finished!"));
刷新IE收藏夹图标        GetDlgItem(IDC_LINKPATH)
->SetWindowText(_T(""));
刷新IE收藏夹图标        UpdateData(FALSE);
刷新IE收藏夹图标        
return 1;
刷新IE收藏夹图标    }

刷新IE收藏夹图标    sFavPath 
+= "\\";
刷新IE收藏夹图标    CString sFavIconPath 
= sFavPath + "_icons";
刷新IE收藏夹图标    
//创建隐藏的图标文件夹保存图标
刷新IE收藏夹图标
    CreateDirectory(sFavIconPath, NULL);
刷新IE收藏夹图标    SetFileAttributes(sFavIconPath, FILE_ATTRIBUTE_HIDDEN);
刷新IE收藏夹图标
刷新IE收藏夹图标    
//gather a list of all links in the favorites folder
刷新IE收藏夹图标
    CDirFileList filelist;
刷新IE收藏夹图标    filelist.BuildList(sFavPath, TRUE, FALSE);
刷新IE收藏夹图标
刷新IE收藏夹图标    m_totalProgress.SetRange(
0, filelist.GetCount());
刷新IE收藏夹图标    m_totalProgress.SetStep(
1);
刷新IE收藏夹图标    
for (int i=0; i<filelist.GetSize(); i++)
刷新IE收藏夹图标刷新IE收藏夹图标    
{
刷新IE收藏夹图标        
//iterate through all links
刷新IE收藏夹图标
        CString linkfile = filelist.GetAt(i);
刷新IE收藏夹图标        CUrlShellLink link;
刷新IE收藏夹图标        
if (!link.Load(linkfile))
刷新IE收藏夹图标            
continue;
刷新IE收藏夹图标        GetDlgItem(IDC_LINKPATH)
->SetWindowText(linkfile.Right(linkfile.GetLength() - linkfile.ReverseFind('\\'- 1));
刷新IE收藏夹图标        
if (link.GetPath().Left(4).CompareNoCase(_T("http"))==0)
刷新IE收藏夹图标刷新IE收藏夹图标        
{
刷新IE收藏夹图标            
//yes, it's an url to http
刷新IE收藏夹图标
            CString iconURL;
刷新IE收藏夹图标            
try
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("connecting刷新IE收藏夹图标"));
刷新IE收藏夹图标                CInternetSession session;
刷新IE收藏夹图标                
//尝试连接
刷新IE收藏夹图标
                CStdioFile * pHtmlFile = session.OpenURL(link.GetPath(),1, INTERNET_FLAG_TRANSFER_BINARY |INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_COOKIES);
刷新IE收藏夹图标                
if (pHtmlFile == NULL)
刷新IE收藏夹图标                    
continue;
刷新IE收藏夹图标                
//now read the html file and search for <LINK REL="SHORTCUT ICON"
刷新IE收藏夹图标
                CString htmlline;
刷新IE收藏夹图标                CString htmlheader;
刷新IE收藏夹图标                GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("receiving page刷新IE收藏夹图标"));
刷新IE收藏夹图标                
while (pHtmlFile->ReadString(htmlline))
刷新IE收藏夹图标刷新IE收藏夹图标                
{
刷新IE收藏夹图标                    htmlheader 
+= htmlline;
刷新IE收藏夹图标                    
//we assume here that the html tag for the favicon is not
刷新IE收藏夹图标                    
//split over several lines or has several whitespaces in it
刷新IE收藏夹图标                    
//this won't work in all cases but a real parser just for
刷新IE收藏夹图标                    
//the favicons is like killing flies with a rocket刷新IE收藏夹图标
刷新IE收藏夹图标
                    CString temp = htmlheader;
刷新IE收藏夹图标                    temp.MakeUpper();
刷新IE收藏夹图标                    
if (temp.Find(_T("</HEAD>"))>=0)
刷新IE收藏夹图标刷新IE收藏夹图标                    
{
刷新IE收藏夹图标                        
//end of header found
刷新IE收藏夹图标
                        int pos = temp.Find(_T("<LINK REL=\"SHORTCUT ICON\""));
刷新IE收藏夹图标                        
if (pos < 0)
刷新IE收藏夹图标                            pos 
= temp.Find(_T("<LINK REL=\"ICON\""));
刷新IE收藏夹图标                        
if (pos >= 0)
刷新IE收藏夹图标刷新IE收藏夹图标                        
{
刷新IE收藏夹图标                            
//int startpos = temp.Find(_T("HREF=\""), pos)+6;
刷新IE收藏夹图标                            
//int endpos = temp.Find(_T("\""), startpos);
刷新IE收藏夹图标                            
//iconURL = htmlheader.Mid(startpos, endpos);
刷新IE收藏夹图标                            
刷新IE收藏夹图标                            
//iconURL = temp.Mid(pos);
刷新IE收藏夹图标
                            iconURL = htmlheader.Mid(temp.Find(_T("HREF=\""), pos)+6);
刷新IE收藏夹图标
                            iconURL = iconURL.Left(iconURL.Find(_T("\"")));
刷新IE收藏夹图标
                            GetDlgItem(IDC_LINKSTATUS)->SetWindowText(_T("icon tag found!"));
刷新IE收藏夹图标                        }
 // if (pos >= 0)
刷新IE收藏夹图标
                        break;
刷新IE收藏夹图标                    }
 // if (htmlheader.Find(_T("</HEAD>"))>=0)
刷新IE收藏夹图标
                }
 // while (pHtmlFile->ReadString(htmlline))
刷新IE收藏夹图标
                pHtmlFile->Close();
刷新IE收藏夹图标                delete pHtmlFile;
刷新IE收藏夹图标                session.Close();
刷新IE收藏夹图标            }

刷新IE收藏夹图标            
catch (CInternetException* pEx)
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                pEx
->Delete();
刷新IE收藏夹图标            }

刷新IE收藏夹图标            
if (iconURL.IsEmpty())
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                iconURL 
= _T("favicon.ico");
刷新IE收藏夹图标                DWORD dwService;
刷新IE收藏夹图标                CString strServer;
刷新IE收藏夹图标                CString strObject;
刷新IE收藏夹图标                INTERNET_PORT nPort;
刷新IE收藏夹图标                AfxParseURL(link.GetPath(), dwService, strServer, strObject, nPort);
刷新IE收藏夹图标                iconURL 
= _T("http://"+ strServer + _T("/"+ iconURL;
刷新IE收藏夹图标            }
 // if (iconURL.IsEmpty())
刷新IE收藏夹图标
            else
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                
if (!iconURL.Left(4).CompareNoCase(_T("http"))==0)
刷新IE收藏夹图标刷新IE收藏夹图标                
{
刷新IE收藏夹图标                    
//not a full URL but a relative one
刷新IE收藏夹图标
                    if (iconURL.GetAt(0== '/')
刷新IE收藏夹图标刷新IE收藏夹图标                    
{
刷新IE收藏夹图标                        DWORD dwService;
刷新IE收藏夹图标                        CString strServer;
刷新IE收藏夹图标                        CString strObject;
刷新IE收藏夹图标                        INTERNET_PORT nPort;
刷新IE收藏夹图标                        AfxParseURL(link.GetPath(), dwService, strServer, strObject, nPort);
刷新IE收藏夹图标                        iconURL 
= _T("http://"+ strServer + _T("/"+ iconURL;
刷新IE收藏夹图标                    }
 // if (iconURL.GetAt(0) == '/')
刷新IE收藏夹图标
                    else
刷新IE收藏夹图标刷新IE收藏夹图标                    
{
刷新IE收藏夹图标                        iconURL 
= link.GetPath().Left(link.GetPath().ReverseFind('/'+ 1+ iconURL;
刷新IE收藏夹图标                    }

刷新IE收藏夹图标                }
 // if (!iconURL.Left(4).CompareNoCase(_T("http"))==0)                
刷新IE收藏夹图标
            }

刷新IE收藏夹图标            
if (!m_runthread)
刷新IE收藏夹图标                
break;
刷新IE收藏夹图标            
//it's time to fetch the icon
刷新IE收藏夹图标
            try
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                
//取图标文件
刷新IE收藏夹图标
                CInternetSession iconsession;
刷新IE收藏夹图标                GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("getting icon刷新IE收藏夹图标"));
刷新IE收藏夹图标                CStdioFile 
* pIconFile = iconsession.OpenURL(iconURL, 1, INTERNET_FLAG_TRANSFER_BINARY |INTERNET_FLAG_EXISTING_CONNECT);
刷新IE收藏夹图标                GetTempPath(
sizeof(buf)/sizeof(TCHAR), buf);
刷新IE收藏夹图标                TCHAR tempfilebuf[MAX_PATH];
刷新IE收藏夹图标                GetTempFileName(buf, _T(
"fav"), 0, tempfilebuf);
刷新IE收藏夹图标                _tcscat(tempfilebuf, _T(
".ico"));
刷新IE收藏夹图标                CFile iconfile;
刷新IE收藏夹图标                iconfile.Open(tempfilebuf, CFile::modeCreate 
| CFile::modeReadWrite);
刷新IE收藏夹图标                
int len = 0;
刷新IE收藏夹图标                
while (len = pIconFile->Read(buf, sizeof(buf)))
刷新IE收藏夹图标刷新IE收藏夹图标                
{
刷新IE收藏夹图标                    iconfile.Write(buf, len);
刷新IE收藏夹图标                }

刷新IE收藏夹图标                iconfile.Close();
刷新IE收藏夹图标                pIconFile
->Close();
刷新IE收藏夹图标                delete pIconFile;
刷新IE收藏夹图标                iconsession.Close();
刷新IE收藏夹图标                
//now check if it's really an icon we got
刷新IE收藏夹图标
                BOOL isIcon = FALSE;
刷新IE收藏夹图标                
if(iconfile.Open(tempfilebuf, CFile::modeRead | CFile::typeBinary))
刷新IE收藏夹图标刷新IE收藏夹图标                
{
刷新IE收藏夹图标                    
int nSize = (int)iconfile.GetLength();
刷新IE收藏夹图标                    BYTE
* pBuffer = new BYTE[nSize];
刷新IE收藏夹图标
刷新IE收藏夹图标                    
if(iconfile.Read(pBuffer, nSize) > 0)
刷新IE收藏夹图标刷新IE收藏夹图标                    
{
刷新IE收藏夹图标                        
if (IsIconOrBmp(pBuffer, nSize))//检查是否是图标
刷新IE收藏夹图标
                            isIcon = TRUE;
刷新IE收藏夹图标                    }

刷新IE收藏夹图标
刷新IE收藏夹图标                    iconfile.Close();
刷新IE收藏夹图标                    delete [] pBuffer;
刷新IE收藏夹图标                }

刷新IE收藏夹图标                
if (isIcon)
刷新IE收藏夹图标刷新IE收藏夹图标                
{
刷新IE收藏夹图标                    GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("storing icon刷新IE收藏夹图标"));
刷新IE收藏夹图标                    CString iconpath 
= _T("_icons\\"+ linkfile.Right(linkfile.GetLength() - linkfile.ReverseFind('\\'- 1);
刷新IE收藏夹图标                    iconpath 
= iconpath.Left(iconpath.ReverseFind('.')) + _T(".ico");
刷新IE收藏夹图标                    DeleteFile(iconpath);
刷新IE收藏夹图标                    MoveFile(tempfilebuf, iconpath);
刷新IE收藏夹图标                    link.SetIconLocation(iconpath);
刷新IE收藏夹图标                    link.SetIconLocationIndex(
0);
刷新IE收藏夹图标                    link.Save(linkfile);
刷新IE收藏夹图标                    nIcons
++;
刷新IE收藏夹图标                }
 // if (isIcon)
刷新IE收藏夹图标
                else
刷新IE收藏夹图标刷新IE收藏夹图标                
{
刷新IE收藏夹图标                    GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("no icon found!"));
刷新IE收藏夹图标                    DeleteFile(tempfilebuf);
刷新IE收藏夹图标                }

刷新IE收藏夹图标            }

刷新IE收藏夹图标            
catch (CInternetException* pEx)
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                pEx
->Delete();
刷新IE收藏夹图标            }

刷新IE收藏夹图标            
catch (CFileException* pEx)
刷新IE收藏夹图标刷新IE收藏夹图标            
{
刷新IE收藏夹图标                pEx
->Delete();
刷新IE收藏夹图标            }

刷新IE收藏夹图标        }
 // if (link.GetPath().Left(4).CompareNoCase(_T("http"))==0) 
刷新IE收藏夹图标
        if (!m_runthread)
刷新IE收藏夹图标            
break;
刷新IE收藏夹图标        m_totalProgress.StepIt();
刷新IE收藏夹图标        result.Format(_T(
"%d of %d links processed. %d icons found"), i+1, filelist.GetSize(), nIcons);
刷新IE收藏夹图标        GetDlgItem(IDC_RESULT)
->SetWindowText(result);
刷新IE收藏夹图标
刷新IE收藏夹图标    }
 // for (int i=0; i<filelist.GetSize(); i++) 
刷新IE收藏夹图标
刷新IE收藏夹图标    
//Closedown the OLE subsystem
刷新IE收藏夹图标
    ::CoUninitialize();
刷新IE收藏夹图标    GetDlgItem(IDOK)
->SetWindowText(_T("OK"));
刷新IE收藏夹图标    GetDlgItem(IDC_LINKSTATUS)
->SetWindowText(_T("finished!"));
刷新IE收藏夹图标    GetDlgItem(IDC_LINKPATH)
->SetWindowText(_T(""));
刷新IE收藏夹图标
刷新IE收藏夹图标    
return 0;
刷新IE收藏夹图标}

刷新IE收藏夹图标