★★★ 有什么办法能真正的清空IE的历史记录?另可开贴再加400分。 ★★★ (200分)

  • 主题发起人 yesky_2008
  • 开始时间
Y

yesky_2008

Unregistered / Unconfirmed
GUEST, unregistred user!
用以下代码清空IE记录,清空后,在C:/Documents and Settings/CurrentUser/Local Settings/History目录中
的历史记录还是有,有什么办法能真正的清空IE的历史记录吗?

unit UrlH_Unit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Activex, Comobj, StdCtrls, ComCtrls, Grids;

const

STATURL_QUERYFLAG_ISCACHED = $00010000;
STATURL_QUERYFLAG_NOURL = $00020000;
STATURL_QUERYFLAG_NOTITLE = $00040000;
STATURL_QUERYFLAG_TOPLEVEL = $00080000;

STATURLFLAG_ISCACHED = $00000001;
STATURLFLAG_ISTOPLEVEL = $00000002;


IID_IEnumStatUrl: TGUID = (D1: $3C374A42; D2: $BAE4; D3: $11CF; D4: ($BF, $7D, $00, $AA, $00, $69, $46, $EE));
IID_IUrlHistoryStg: TGUID = (D1: $3C374A41; D2: $BAE4; D3: $11CF; D4: ($BF, $7D, $00, $AA, $00, $69, $46, $EE));
IID_IUrlHistoryStg2: TGUID = (D1: $AFA0DC11; D2: $C313; D3: $831A; D4: ($83, $1A, $00, $C0, $4F, $D5, $AE, $38));
IID_IUrlHistoryNotify: TGUID = (D1: $BC40BEC1; D2: $C493; D3: $11D0; D4: ($83, $1B, $00, $C0, $4F, $D5, $AE, $38));

SID_IEnumStatUrl = '{3C374A42-BAE4-11CF-BF7D-00AA006946EE}';
SID_IUrlHistoryStg = '{3C374A41-BAE4-11CF-BF7D-00AA006946EE}';
SID_IUrlHistoryStg2 = '{AFA0DC11-C313-11d0-831A-00C04FD5AE38}';
SID_IURLHistoryNotify = '{BC40BEC1-C493-11d0-831B-00C04FD5AE38}';
CLSID_CUrlHistory: TGUID = '{3C374A40-BAE4-11CF-BF7D-00AA006946EE}';


type
STATURL = record
cbSize: DWORD;
pwcsUrl: DWORD;
pwcsTitle: DWORD;
ftLastVisited: FILETIME;
ftLastUpdated: FILETIME;
ftExpires: FILETIME;
dwFlags: DWORD;
end;


IEnumSTATURL = interface(IUnknown)
['{3C374A42-BAE4-11CF-BF7D-00AA006946EE}']
function Next(celt: Integer; out elt; pceltFetched: PLongint): HRESULT; stdcall;
function Skip(celt: Longint): HRESULT; stdcall;
function Reset: HResult; stdcall;
function Clone(out ppenum: IEnumSTATURL): HResult; stdcall;
function SetFilter(poszFilter: PWideChar; dwFlags: DWORD): HResult; stdcall;
end;

IUrlHistoryStg = interface(IUnknown)
['{3C374A41-BAE4-11CF-BF7D-00AA006946EE}']
function AddUrl(pocsUrl: PWideChar; pocsTitle: PWideChar; dwFlags: Integer): HResult; stdcall;
function DeleteUrl(pocsUrl: PWideChar; dwFlags: Integer): HResult; stdcall;
function QueryUrl(pocsUrl: PWideChar; dwFlags: Integer; var lpSTATURL: STATURL): HResult; stdcall;
function BindToObject(pocsUrl: PWideChar; var riid: TIID; out ppvOut: Pointer): HResult; stdcall;
function EnumUrls(out ppenum: IEnumSTATURL): HResult; stdcall;
end;

IUrlHistoryStg2 = interface(IUrlHistoryStg)
['{AFA0DC11-C313-11D0-831A-00C04FD5AE38}']
function AddUrlAndNotify(pocsUrl: PWideChar; pocsTitle: PWideChar; dwFlags: Integer;
fWriteHistory: Integer; var poctNotify: Pointer;
const punkISFolder: IUnknown): HResult; stdcall;
function ClearHistory: HResult; stdcall;
end;

IUrlHistoryNotify = interface(IOleCommandTarget)
['{BC40BEC1-C493-11d0-831B-00C04FD5AE38}']
end;



TForm1 = class(TForm)
StringGrid1: TStringGrid;
RetrieveBtn: TButton;
ClearBtn: TButton;
procedure RetrieveBtnClick(Sender: TObject);
procedure ClearBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
I: IUrlHistoryStg2;

implementation

{$R *.DFM}


function FileTimeToDt(Ft: TFileTime): TDateTime;
var
l: Integer;
lft: TFileTime;
begin
FileTimeToLocalFiletime(Ft, lft);
if FileTimeToDosDateTime(lft, Longrec(l).Hi, Longrec(l).Lo) then
result := FiledateToDatetime(l) else
result := 0;
end;


procedure TForm1.RetrieveBtnClick(Sender: TObject);
var
r: Staturl;
Enum: IEnumStatUrl;
X: Integer;
Row: Integer;
begin
StringGrid1.Cells[0, 0] := 'Last Visited';
StringGrid1.Cells[1, 0] := 'Title';
StringGrid1.Cells[2, 0] := 'Url';
StringGrid1.Cells[3, 0] := 'Last Updated';
StringGrid1.Cells[4, 0] := 'Expires';
Row := 0;
I := CreateComObject(ClsId_CUrlHistory) as IUrlHistoryStg2;
I.EnumUrls(Enum);
Enum.SetFilter('http://', 0);
while enum.next(1, r, @X) = S_OK do begin
Inc(Row);
StringGrid1.RowCount := Row + 1;
Stringgrid1.Cells[0, Row] := DateTimeToStr(FileTimeToDt(r.ftLastVisited));
Stringgrid1.Cells[1, Row] := PWidechar(Pointer(r.pwcsTitle));
Stringgrid1.Cells[2, Row] := PWidechar(Pointer(r.pwcsUrl));
Stringgrid1.Cells[3, Row] := DateTimeToStr(FileTimeToDt(r.ftLastUpdated));
Stringgrid1.Cells[4, Row] := DateTimeToStr(FileTimeToDt(r.ftExpires));
end;
end;

procedure TForm1.ClearBtnClick(Sender: TObject);
begin
I.ClearHistory;
end;

end.
 
用COM,IE的这个问题是个典型
这问题并不难
我有代码
 
to:浮生
能否给我可用的代码
 
也是IE的问题,我的右键“目标另存为”什么时间都是不可用的,怎样设置?
 
从IE选项里面清空及删除文件夹,要清空网页上查询过的内容,到3721上清理垃圾即可,OK!!!
 
to lmcz716:
我是要用delphi编程实现。
 
to:浮生
能否给我可用的代码
angleli1981@163.com
 
to:浮生
能否给我可用的代码
yesky_2008@yahoo.com.cn
 
to:浮生
能否给我可用的代码
luckhacker@163.com
谢了。
 
HKEY-CURRENT-USER\Software\microsoft\InternetExplorer\Type-dURLs
键值,该键值就是专门用于保存IE历史记录的。
把它们干掉就行。这是在Win2k下。
//清除IE的英文URL.
procedure TForm1.Button1Click(Sender: TObject);
var
m_Reg: TRegistry;
m_ValueNameList: TStrings;
m_i: integer;
begin
m_ValueNameList := TStringList.Create;
m_Reg := TRegistry.Create;
m_Reg.RootKey := HKEY_CURRENT_USER;
if m_Reg.OpenKey('/Software/Microsoft/Internet Explorer/TypedURLs', false) then
m_Reg.GetValueNames(m_ValueNameList);
for m_i := 0 to m_ValueNameList.Count - 1 do
m_Reg.DeleteValue(m_ValueNameList.Strings[m_i]);

end;

end.
//清除3721自带的网络实名。
m_ValueNameList.Clear;
m_Reg.RootKey := HKEY_USERS;
if m_Reg.OpenKey('/S-1-5-21-515967899-436374069-1202660629-1000' +
'/Software/3721/CnsUrl', false) then
m_Reg.GetValueNames(m_ValueNameList);
for m_i := 0 to m_ValueNameList.Count - 1 do
m_Reg.DeleteValue(m_ValueNameList.Strings[m_i]);

//清除你机器上输入的网络实名
m_ValueNameList.Clear;
m_Reg.RootKey := HKEY_USERS;
if m_Reg.OpenKey('HKEY_USERS/S-1-5-21-515967899-436374069-1202660629-1000' +
'/Software/3721/InputCns', false) then
m_Reg.GetValueNames(m_ValueNameList);
for m_i := 0 to m_ValueNameList.Count - 1 do
m_Reg.DeleteValue(m_ValueNameList.Strings[m_i]);



 
谢谢YFeral,可我是想清除C:/Documents and Settings/CurrentUser/Local Settings/History目录中
的历史记录,不是IE下拉框的历史记录。
 
你用的什么系统?Win2k我看了看没有。
 
用注册表的办法搞定!你查查那个目录下的东西在注册表里有没有,有的话找出规律干掉
它们,如果不用程序的话用IE的自带清理功能是不错的。IE -> 属性 - > 清除历史记录。
 
我用win2000,CurrentUser是当前登录用户的名称,根据登录名不同而不同。注册表没有,应该是在history/index.dat文件和它的子目录里,其中index.dat是隐藏文件。
 
看了,注册表里确实没有。但History里好象是文件夹。
 
在dos,到History目录下,dir/a 可看到。可删不了。
 
我有办法:
见贴:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1618481
后半部分有楼主的关于此问题的详细解释。
 
首先用 FileSearch 控件检索目录
C:/Documents and Settings/CurrentUser/Local Settings/History下的所有文件
并将文件绝对路径保存到 stringList,然后
用 Delete()删除检索文件即可 。
 
to YFeral:
谢谢,试过但还是没作用。

to zhbj:
无法删除,共享冲突,源文件和目标文件正在使用。
 

Similar threads

I
回复
0
查看
518
import
I
I
回复
0
查看
507
import
I
H
回复
2
查看
133
huang-111222
H
顶部