Google Chrome 浏览器历史记录的获取与清除
2012-05-23 15:30
337 查看
以前做的一款产品要求能够获取IE浏览器的历史记录,并能够进行彻底删除,当时chrome浏览器、FireFox浏览器都刚刚兴起不久,索性将此功能进行扩展,实现对多浏览器的支持。
查找历史记录这种东西,主要就是找到其存储的位置,分析其文件的格式,IE的就不说了,微软有相应的API。Google Chrome浏览器使用小型桌面数据库SQLLite存储其历史记录信息,其实就是一个数据库文件,一些数据库表。
那么我们自己编写一个获取chrome历史记录的小工具都需要哪些准备呢?首先,我们要找到chrome浏览器历史记录文件存在的位置,并能够编程获得这个位置。其次,我们要能够读取sqllite数据库文件,并能够对其进行操作。
1、获得chrome浏览器历史记录数据库文件的存储位置,参考以下代码片段:
#include <shlobj.h>
#include "Shlwapi.h"
#pragma comment(lib,"Shlwapi.lib")
#define CSIDL_LOCAL_APPDATA 0x001c
char path[MAX_PATH];
SHGetSpecialFolderPathA(this->GetSafeHwnd(),path,CSIDL_LOCAL_APPDATA,FALSE);
strcat_s(path,"\\google\\chrome\\User Data\\default\\history");
注意,这里的history文件没有扩展名
2、打开并读取历史记录数据库文件
chrome在运行的时候会打开这个数据库文件,所以我们要先检测chrome是否在运行,如果在运行就不能读取数据库了,因为会有共享冲突。
读取sqllite数据库文件需要有相应的api支持,这里我用了一个封装的比较好的c++类库CppSQLite3,这样读取sqllite数据库就简单多了
网页历史记录存储在表urls中,懂点SQL语句的可就简单多了 用这么一条语句"select url,title from urls",就可以将历史记录都读取出来了。
那删除呢?也是一条语句“delete from urls”,这不是很简单么。
不过还有一点要注意,sqllite数据库文件中默认存储的编码格式是 UTF8,我们需要将其转换为可以显示的gbk格式,否则只能看到乱码了。
参考以下代码片段:
bool ChromeHistory::GetUrlHistroy(CStringArray history[])
{
char path[MAX_PATH];
SHGetSpecialFolderPathA(this->GetSafeHwnd(),path,CSIDL_LOCAL_APPDATA,FALSE);
strcat_s(path,"\\google\\chrome\\User Data\\default\\history");
if (PathFileExistsA(path))
{
if (IsRunning(_T("chrome.exe")))
{
//MessageBox(_T("chrome正在运行,请关闭后再试 !"));
return FALSE;
}
//
try
{
CppSQLite3DB db;
CppSQLite3Query query;
db.open(path);
query=db.execQuery("select url,title from urls");
while(!query.eof())
{
//MessageBox(query.fieldValue("title"));
CStringA utf8url;
utf8url=query.fieldValue("url");
CStringA utf8title;
utf8title=query.fieldValue("title");
ConvertUtf8ToGBK(utf8url);
ConvertUtf8ToGBK(utf8title);
//MessageBox(utf8url);
history[0].Add(CString(utf8url));
history[1].Add(CString(utf8title));
query.nextRow();
}
db.close();
}
catch (CppSQLite3Exception& e)
{
//MessageBox((LPWSTR)e.errorMessage());
return FALSE;
}
}
return TRUE;
}
3、补充:若要完全清除chrome的历史记录,上面的方法是不够的,chrome 浏览器在打开网页的时候会先把网页存放到缓存中,这个缓存会一直保留在本机上,但缓存文件是google自定义的特殊格式,需要自行解析,所以要完全清除chrome历史记录需要将缓存目录也安全删除掉。
源码已上传,可自由下载。http://download.csdn.net/detail/itmes/4323836
查找历史记录这种东西,主要就是找到其存储的位置,分析其文件的格式,IE的就不说了,微软有相应的API。Google Chrome浏览器使用小型桌面数据库SQLLite存储其历史记录信息,其实就是一个数据库文件,一些数据库表。
那么我们自己编写一个获取chrome历史记录的小工具都需要哪些准备呢?首先,我们要找到chrome浏览器历史记录文件存在的位置,并能够编程获得这个位置。其次,我们要能够读取sqllite数据库文件,并能够对其进行操作。
1、获得chrome浏览器历史记录数据库文件的存储位置,参考以下代码片段:
#include <shlobj.h>
#include "Shlwapi.h"
#pragma comment(lib,"Shlwapi.lib")
#define CSIDL_LOCAL_APPDATA 0x001c
char path[MAX_PATH];
SHGetSpecialFolderPathA(this->GetSafeHwnd(),path,CSIDL_LOCAL_APPDATA,FALSE);
strcat_s(path,"\\google\\chrome\\User Data\\default\\history");
注意,这里的history文件没有扩展名
2、打开并读取历史记录数据库文件
chrome在运行的时候会打开这个数据库文件,所以我们要先检测chrome是否在运行,如果在运行就不能读取数据库了,因为会有共享冲突。
读取sqllite数据库文件需要有相应的api支持,这里我用了一个封装的比较好的c++类库CppSQLite3,这样读取sqllite数据库就简单多了
网页历史记录存储在表urls中,懂点SQL语句的可就简单多了 用这么一条语句"select url,title from urls",就可以将历史记录都读取出来了。
那删除呢?也是一条语句“delete from urls”,这不是很简单么。
不过还有一点要注意,sqllite数据库文件中默认存储的编码格式是 UTF8,我们需要将其转换为可以显示的gbk格式,否则只能看到乱码了。
参考以下代码片段:
bool ChromeHistory::GetUrlHistroy(CStringArray history[])
{
char path[MAX_PATH];
SHGetSpecialFolderPathA(this->GetSafeHwnd(),path,CSIDL_LOCAL_APPDATA,FALSE);
strcat_s(path,"\\google\\chrome\\User Data\\default\\history");
if (PathFileExistsA(path))
{
if (IsRunning(_T("chrome.exe")))
{
//MessageBox(_T("chrome正在运行,请关闭后再试 !"));
return FALSE;
}
//
try
{
CppSQLite3DB db;
CppSQLite3Query query;
db.open(path);
query=db.execQuery("select url,title from urls");
while(!query.eof())
{
//MessageBox(query.fieldValue("title"));
CStringA utf8url;
utf8url=query.fieldValue("url");
CStringA utf8title;
utf8title=query.fieldValue("title");
ConvertUtf8ToGBK(utf8url);
ConvertUtf8ToGBK(utf8title);
//MessageBox(utf8url);
history[0].Add(CString(utf8url));
history[1].Add(CString(utf8title));
query.nextRow();
}
db.close();
}
catch (CppSQLite3Exception& e)
{
//MessageBox((LPWSTR)e.errorMessage());
return FALSE;
}
}
return TRUE;
}
3、补充:若要完全清除chrome的历史记录,上面的方法是不够的,chrome 浏览器在打开网页的时候会先把网页存放到缓存中,这个缓存会一直保留在本机上,但缓存文件是google自定义的特殊格式,需要自行解析,所以要完全清除chrome历史记录需要将缓存目录也安全删除掉。
源码已上传,可自由下载。http://download.csdn.net/detail/itmes/4323836
相关文章推荐
- 清除Eclipse中的内置浏览器中的历史记录
- Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信
- asp清除浏览器历史记录代码
- Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信
- android获取浏览器历史记录
- 清除eclipse中的内置浏览器中的历史记录
- 如何快速清除IE8浏览器的历史记录
- 清除Eclipse中的内置浏览器中的历史记录(REF)
- 清除Eclipse中的内置浏览器中的历史记录
- MyEclipse中的内置浏览器中的历史记录怎么清除
- android代码如何获取非自带浏览器的历史记录,最好附带关键代码
- 清除Eclipse中的内置浏览器中的历史记录
- C++获取多浏览器上网历史记录示例代码(支持获取IE/Chrome/FireFox)
- 如何获取与清除IE历史记录
- 清除Eclipse中的内置浏览器中的历史记录
- 使用Python获取Chrome浏览器历史记录
- Android 浏览网页:WebView 嵌入浏览器(浏览历史返回、自定义加载失败界面、支持缩放、获取标题栏)
- 如何清除Visual Studio中文件字段查找的历史记录
- 清除Totem movie player的历史记录
- 图解用HTML5的popstate如何玩转浏览器历史记录