文中的链接为代码的出处,没生产代码,知识代码的搬运工。
IE历史记录存放位置
C:\Users\XXX\AppData\Local\Microsoft\Windows\History
https://www.cnblogs.com/calm2012/archive/2013/03/13/2958048.html
#include <wininet.h>
#include <shlobj.h>
#include <Shlwapi.h>
#pragma comment(lib,"Shlwapi.lib")
#pragma comment(lib,"Wininet.lib")
#include <tlhelp32.h>
#include <atlconv.h>
void urlFiltrateIE(LPCWSTR lpUrl)
{
if(!lpUrl){
return ;
}
wprintf(L"%s\n", lpUrl);
}
void GetIeHistoryUseWininet (void)
{
// 获取IE的历史记录
HANDLE hCacheEnumHandle = NULL;
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
DWORD dwSize = 1024;
lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)malloc(dwSize);
lpCacheEntry->dwStructSize = dwSize;
hCacheEnumHandle = FindFirstUrlCacheEntry(_T("visited:"), lpCacheEntry, &dwSize);
if(hCacheEnumHandle != NULL)
{
urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
}
else
{
switch(GetLastError())
{
case ERROR_INSUFFICIENT_BUFFER:
if(lpCacheEntry){
free(lpCacheEntry);
}
lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)malloc(dwSize);
lpCacheEntry->dwStructSize = dwSize;
hCacheEnumHandle = FindFirstUrlCacheEntry(_T("visited:"), lpCacheEntry,
&dwSize);
if (hCacheEnumHandle != NULL)
{
urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
break;
}
else
{
if(lpCacheEntry){
free(lpCacheEntry);
}
return;
}
default:
{
FindCloseUrlCache(hCacheEnumHandle);
}
}
}
bool bNext = true;
do
{
if (FindNextUrlCacheEntry(hCacheEnumHandle, lpCacheEntry, &dwSize))
{
urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
}
else
{
switch(GetLastError())
{
case ERROR_INSUFFICIENT_BUFFER:
if(lpCacheEntry){
free(lpCacheEntry);
}
lpCacheEntry =
(LPINTERNET_CACHE_ENTRY_INFO)malloc(dwSize);
memset(lpCacheEntry,0,dwSize);
lpCacheEntry->dwStructSize = dwSize;
if (FindNextUrlCacheEntry(hCacheEnumHandle, lpCacheEntry,
&dwSize))
{
urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
break;
}
else
{
FindCloseUrlCache(hCacheEnumHandle);
bNext = false;
break;
}
break;
case ERROR_NO_MORE_ITEMS:
FindCloseUrlCache(hCacheEnumHandle);
bNext = false;
break;
default:
FindCloseUrlCache(hCacheEnumHandle);
bNext = false;
break;
}
}
} while (bNext);
if(lpCacheEntry){
free(lpCacheEntry);
}
}
https://www.cnblogs.com/joeblackzqq/archive/2011/03/15/1985379.html
#include<stdio.h>
#include<windows.h>//所需头文件
#include <ShlObj.h>
#include <urlhist.h>
#include <COMDEF.H>
void PrintHistory()
{
HRESULT hr;
IUrlHistoryStg2 *puhs;
IEnumSTATURL *pesu;
STATURL su;
ULONG celt;
_bstr_t bstr;
CoInitialize(NULL);
hr = ::CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg, (LPVOID*)&puhs);
if(SUCCEEDED(hr))
{
hr = puhs-> EnumUrls(&pesu);
if(SUCCEEDED(hr))
{
while(SUCCEEDED(pesu->Next(1, &su, &celt)) && celt > 0)
{
if(su.pwcsUrl){
wprintf(L"%s\n", su.pwcsUrl);
}
pesu->Release();
}
}
puhs-> Release();
}
}
int main(void)
{
PrintHistory();
return 0;
}
//浏览器地址栏记录
https://blog.csdn.net/fanying1115/article/details/106641155
void read_value(){
HKEY cpp_key;
LPCTSTR cpp_data = L"Software\\Microsoft\\Internet Explorer\\TypedUrls";
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, cpp_data, 0, KEY_READ, &cpp_key)){
DWORD dwIndex = 0, NameSize, NameCnt, NameMaxLen, Type;
DWORD KeySize, KeyCnt, KeyMaxLen, DateSize, MaxDateLen;
if (ERROR_SUCCESS == RegQueryInfoKey(cpp_key, NULL, NULL, 0, &KeyCnt, &KeyMaxLen, NULL, &NameCnt, &NameMaxLen, &MaxDateLen, NULL, NULL)){
for (DWORD dwIndex = 0; dwIndex < NameCnt; dwIndex++)
{
DateSize = MaxDateLen + 1;
NameSize = NameMaxLen + 1;
WCHAR * szValueName = (WCHAR *)malloc(NameSize);
LPBYTE szValueDate = (LPBYTE)malloc(DateSize);
RegEnumValue(cpp_key, dwIndex, szValueName, &NameSize, NULL, &Type, szValueDate, &DateSize);
wprintf(L"%s %s\n", szValueName, szValueDate);
free(szValueName);
free(szValueDate);
}
}
}
RegCloseKey(cpp_key);
}
一个开源的工具,可以查看ie的历史记录
https://github.com/csuft/QIECacheViewer
