關於IE歷史紀錄的複製問題 |
尚未結案
|
fanmeide
一般會員 發表:10 回覆:5 積分:3 註冊:2008-02-24 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
[code delphi] uses ComObj, ActiveX, ShlObj; function GetHistoryToday(List: TStrings): Integer; var pvDesktop: IShellFolder; pvFolder: IShellFolder; pvToday: IShellFolder; pvEnumToday: IEnumIDList; pvEnumHist: IEnumIDList; pvMalloc: IMalloc; pidlHistory: PItemIDList; pidlToday: PItemIDList; pidlItem: PItemIDList; lpValue: TStrRet; lpItem: TStrRet; szValue: String; cbCount: Cardinal; function StrRetToStr(StrRet: TStrRet): String; begin case StrRet.uType of STRRET_CSTR : SetString(result, StrRet.cStr, lstrlen(StrRet.cStr)); STRRET_OFFSET : SetLength(result, 0); STRRET_WSTR : result:=StrRet.pOleStr; else SetLength(result, 0); end; end; begin // Check list if Assigned(List) then begin // Lock list List.BeginUpdate; // Resource protection try // Clear the list List.Clear; // Get malloc if (SHGetMalloc(pvMalloc) = S_OK) then begin // Get desktop folder if (SHGetDesktopFolder(pvDesktop) = S_OK) then begin // Get history pidl if (SHGetSpecialFolderLocation(GetDesktopWindow, CSIDL_HISTORY, pidlHistory) = S_OK) then begin // Bind to folder interface if (pvDesktop.BindToObject(pidlHistory, nil, IID_IShellFolder, pvFolder) = S_OK) then begin // Locate the folder for "Today" if (pvFolder.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_INCLUDEHIDDEN, pvEnumHist) = S_OK) then begin // Enumerate items while (pvEnumHist.Next(1, pidlItem, cbCount) = S_OK) do begin // Get display name of pidl if (pvFolder.GetDisplayNameOf(pidlItem, SHGDN_NORMAL or SHGDN_INFOLDER, lpValue) = S_OK) then begin // Resource protection try // Check for "Today" if (CompareText(StrRetToStr(lpValue), '今天') = 0) then begin // Switch pidls pidlToday:=pidlItem; // Bind to folder interface if (pvFolder.BindToObject(pidlToday, nil, IID_IShellFolder, pvToday) = S_OK) then begin // Get enumerator for "Today" folder if (pvToday.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN, pvEnumToday) = S_OK) then begin // Enumerate items while (pvEnumToday.Next(1, pidlItem, cbCount) = S_OK) do begin // Get the url if (pvToday.GetDisplayNameOf(pidlItem, SHGDN_NORMAL or SHGDN_INFOLDER, lpItem) = S_OK) then begin // Resource protection try // Get the string value szValue:=StrRetToStr(lpItem); // Check URL string if (Length(szValue) > 0) then List.Add(szValue); finally // Free string memory if (lpItem.uType = STRRET_WSTR) then pvMalloc.Free(lpItem.pOleStr); end; end; // Free memory CoTaskMemFree(pidlItem); end; // Release interface pvEnumToday:=nil; end; // Release interface pvToday:=nil; end; // Free memory CoTaskMemFree(pidlToday); // Done processing break; end; finally // Free string memory if (lpValue.uType = STRRET_WSTR) then pvMalloc.Free(lpValue.pOleStr); end; end; // Free the pidl CoTaskMemFree(pidlItem); end; // Release interface pvEnumHist:=nil; end; // Release interface pvFolder:=nil; end; // Free memory pvMalloc.Free(pidlHistory); end; // Release interface pvDesktop:=nil; end; // Release interface pvMalloc:=nil; end; finally // Unlock the list List.EndUpdate; end; // Return list count result:=List.Count; end else // No list result:=(-1); end; [/code] |
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |