Как я могу получить счет истории Internet Explorer? Я могу добиться этого с помощью Shell.Application в VB, но не могу в Delphi.
Я нашел код с "CLSID_CUrlHistory", который показывает все записи в кэше.
Я пытался преобразовать то же самое, но я что-то упустил, пожалуйста, посмотрите на следующий ответ и исправьте меня, где я ошибся
Procedure ListIeHistory;
Const
HISTORY_LIST = 34;
ITEM_NAME = 0;
ITEM_DATE = 2;
var
ShellSession : OleVariant;
ShellHistory : OleVariant;
ShellEntry : OleVariant;
ShellHistoryFolder : OleVariant;
ShellCollection : OleVariant;
oEnum : IEnumvariant;
iValue : LongWord;
Begin
result:='';
ShellSession:= CreateOleObject('Shell.Application');
ShellHistory := ShellSession.Namespace(HISTORY_LIST);
ShellHistoryFolder:= ShellHistory.self;
ShellCollection := ShellHistory.Items;
oEnum := IUnknown(ShellCollection._NewEnum) as IEnumVariant;
while oEnum.Next(1, ShellEntry, iValue) = 0 do
begin
form1.Memo1.Lines.Add(vartostr(ShellEntry.Name));
end;
end;
Под редакцией TLama
Обратите внимание, что в этом коде нет обработки ошибок (я сейчас занят), поэтому воспринимайте его как вдохновение. Но вы уверены, что это то, что вы хотите, я думаю, что если вы будете следовать коду из моего ответа и отфильтровать некоторые элементы (скорее всего, период), вы получите то же самое.
Это просматривает каталог C:\Users\TLama\AppData\Local\Microsoft\Windows\History
, поэтому я думаю, что вам не хватает некоторых элементов истории (не я ;-), но у меня нет времени изучать, откуда взяты элементы истории.
Обратите внимание, что использование интерфейса IUrlHistoryStg
- правильный путь, а не это .
uses
ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
URL: string;
Visited: string;
I, J, K: Integer;
Shell: OleVariant;
Item: OleVariant;
SiteFolder: OleVariant;
SiteItem: OleVariant;
PageFolder: OleVariant;
PageItem: OleVariant;
Folder: OleVariant;
const
ITEM_NAME = 0;
ITEM_DATE = 2;
HISTORY_LIST = 34;
begin
Shell := CreateOleObject('Shell.Application');
Folder := Shell.NameSpace(HISTORY_LIST);
Memo1.Lines.Add('Location: ' + Folder.Self.Path);
for I := 0 to Folder.Items.Count - 1 do
begin
Item := Folder.Items.Item(I);
Memo1.Lines.Add('Period: ' + Item.Name);
if Item.IsFolder then
begin
SiteFolder := Item.GetFolder;
for J := 0 to SiteFolder.Items.Count - 1 do
begin
SiteItem := SiteFolder.Items.Item(J);
Memo1.Lines.Add('Site: ' + SiteItem.Name);
if SiteItem.IsFolder then
begin
PageFolder := SiteItem.GetFolder;
for K := 0 to PageFolder.Items.Count - 1 do
begin
PageItem := PageFolder.Items.Item(K);
URL := PageFolder.GetDetailsOf(PageItem, ITEM_NAME);
Visited := PageFolder.GetDetailsOf(PageItem, ITEM_DATE);
Memo1.Lines.Add('URL: ' + URL + '; Visited: ' + Visited);
end;
end;
end;
end;
end;
end;