亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++獲取多瀏覽器上網歷史記錄示例代碼(支持獲取IE/Chrome/FireFox)

2020-01-26 15:41:44
字體:
來源:轉載
供稿:網友


復制代碼 代碼如下:

// FileName: BrowsHistory.h

// ------------------------------------------------------------------------------------------------------------------------
// Remarks:
//   BrowsHistory對象應該設置成全局,或者靜態;防止還沒有獲取完網址,對象就析構了;
// ------------------------------------------------------------------------------------------------------------------------


#pragma once
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>

struct BrowsData
{
public:
    // 網址
    CString strURL;

    // 對應網址訪問次數
    unsigned int nCount;

    // 重載<操作符
    bool operator < (const BrowsData &m)const
    {
        return nCount > m.nCount;
    }
};

class BrowsHistory
{
private:

    // 保存獲得的網址和訪問次數
    std::vector<BrowsData> m_BrowsHistroy;

private:

    // IE網址過濾,如只取網址com前邊的
    void urlFiltrateIE (LPWSTR lpszSourceUrlName);

    // Chrome網址過濾,如只取網址com前邊的
    void urlFiltrateChrome (CString strUrlName);

    // Firefox網址過濾,如只去網址com前邊的
    void urlFiltrateFirefox (CString strUrlName, int nCount);

    // 查詢進程是否已存在, 返回true表示存在;自動結束其進程
    bool IsRunning(CString exe);

    // 編碼轉換
    void ConvertUtf8ToGBK(CStringA &strUtf8);

    // 獲取瀏覽器歷史記錄
    void InitHistroy (void);

    // 多線程函數
    static void ThreadPro (LPVOID * ptr);

    // 對獲得的網址進行排序
    void Sort (void);

public:
    BrowsHistory();
    ~BrowsHistory();

    // 獲取網址的進程,是否執行完;執行完時為true;
    bool m_bStatus;

    // 初始化
    void Init (void);

    // 獲取瀏覽器歷史記錄
    std::vector<BrowsData> GetBrowsHistory(void) const;
};

復制代碼 代碼如下:

// // FileName: BrowsHistory.cpp

#include "stdafx.h"                    // 如果編譯出錯請刪除此行
#include "BrowsHistory.h"

#include <wininet.h>
#include "Common//CppSQLite3.h"
#include <shlobj.h>
#include "Shlwapi.h"
#pragma  comment(lib,"Shlwapi.lib")
#include "tlhelp32.h"
#pragma comment(lib,"common//sqlite3.lib")

#include <atlconv.h>

 

BrowsHistory::BrowsHistory()
{
    m_bStatus = false;
}

BrowsHistory::~BrowsHistory()
{

}

void BrowsHistory::urlFiltrateIE (LPWSTR lpszSourceUrlName)
{
    BrowsData browsDate;
    browsDate.nCount = 0;

    CString strTemp(lpszSourceUrlName);
   

    std::vector<BrowsData>::iterator iter;

    // 排除非必要的網址
    if (strTemp.Find(_T("@http://")) != -1)
    {
        strTemp.Delete(0, strTemp.Find(_T("@http://"))+8);

        // 排除非必要網址
        if (strTemp.Find(_T(":")) != -1)
        {
            return;
        }

        int nIndex = strTemp.Find(_T("/"));
        if (nIndex != -1)
        {
            for (iter=m_BrowsHistroy.begin(); iter != m_BrowsHistroy.end(); iter++)
            {
                if (iter->strURL == strTemp.Left(nIndex))
                {
                    iter->nCount += 1;
                    return;
                }
            }

            browsDate.strURL = strTemp.Left(nIndex);
            browsDate.nCount = 1;
            m_BrowsHistroy.push_back(browsDate);
        }
        else
        {
            for (iter=m_BrowsHistroy.begin(); iter != m_BrowsHistroy.end(); iter++)
            {
                if (iter->strURL == strTemp)
                {
                    iter->nCount += 1;
                    return;
                }
            }

            browsDate.strURL = strTemp;
            browsDate.nCount = 1;
            m_BrowsHistroy.push_back(browsDate);
        }
    }
}

 void BrowsHistory::urlFiltrateChrome (CString strUrlName)
 {
     // 刪除開始的"https://"

    if (strUrlName.Find(_T("https://")) != -1)
    {
        strUrlName.Delete(0, 8);
    }
    else if(strUrlName.Find(_T("http://")) != -1)
    {
         strUrlName.Delete(0, 7);
    }

     int nIndex = strUrlName.Find(_T("/"));

    BrowsData browsDate;
    browsDate.nCount = 0;
    std::vector<BrowsData>::iterator iter;

    if (nIndex != -1)
    {
        for (iter=m_BrowsHistroy.begin(); iter != m_BrowsHistroy.end(); iter++)
        {
            if (iter->strURL == strUrlName.Left(nIndex))
            {
                iter->nCount += 1;
                return;
            }
        }

        browsDate.strURL = strUrlName.Left(nIndex);
        browsDate.nCount = 1;
        m_BrowsHistroy.push_back(browsDate);
    }
    else
    {
        for (iter=m_BrowsHistroy.begin(); iter != m_BrowsHistroy.end(); iter++)
        {
            if (iter->strURL == strUrlName)
            {
                iter->nCount += 1;
                return;
            }
        }

        browsDate.strURL = strUrlName;
        browsDate.nCount = 1;
        m_BrowsHistroy.push_back(browsDate);
    }
 }

void BrowsHistory::urlFiltrateFirefox (CString strUrlName, int nCount)
{
    BrowsData browsDate;
    browsDate.nCount = 0;

    int nIndex = strUrlName.Find(_T("/"));
    if (nIndex != -1)
    {
        strUrlName = strUrlName.Left(nIndex);
    }

    std::vector<BrowsData>::iterator iter;
    for (iter=m_BrowsHistroy.begin(); iter != m_BrowsHistroy.end(); iter++)
    {
        if (iter->strURL == strUrlName)
        {
            iter->nCount += nCount;
            return;
        }
    }

    browsDate.strURL = strUrlName;
    browsDate.nCount += nCount;
    m_BrowsHistroy.push_back(browsDate);
}

bool BrowsHistory::IsRunning(CString exe)
{
    PROCESSENTRY32 pe32;
    HANDLE hprocess;
    hprocess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    pe32.dwSize = sizeof(PROCESSENTRY32);

    if(Process32First(hprocess,&pe32))
    {
        do
        {
            HANDLE h_id;
            h_id = OpenProcess(PROCESS_TERMINATE,false,pe32.th32ProcessID);

            CString exefile;
            exefile=pe32.szExeFile;
            exefile.MakeLower();
            exe.MakeLower();
            if(exefile==exe)
            {
                if (TerminateProcess(h_id, 0) !=0)
                {
                    return FALSE;
                }
                else
                {
                    return TRUE;
                }
            }
        }
        while(Process32Next(hprocess,&pe32));
    }
    return FALSE;
}

void BrowsHistory::ConvertUtf8ToGBK(CStringA &strUtf8)
{

    int len=MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8, -1, NULL,0);
    unsigned short * wszGBK = new unsigned short[len+1];
    memset(wszGBK, 0, len * 2 + 2);
    MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)strUtf8, -1,(LPWSTR) wszGBK, len);
    len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
    char *szGBK=new char[len + 1];
    memset(szGBK, 0, len + 1);
    WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, len, NULL,NULL);
    strUtf8 = szGBK;
    delete[] szGBK;
    delete[] wszGBK;
}

void BrowsHistory::Init (void)
{
    // 創建一個線程
    CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadPro, this, 0, NULL);
}

void BrowsHistory::InitHistroy (void)
{

    // 用來支持多次調用
    m_bStatus = false;
    m_BrowsHistroy.clear();

    // 獲取IE的歷史記錄
    HANDLE hCacheEnumHandle = NULL;
    LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
    DWORD dwSize = 4096;
    BrowsData browsDate;
    browsDate.nCount = 0;

    lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwSize];
    lpCacheEntry->dwStructSize = dwSize;

    hCacheEnumHandle = FindFirstUrlCacheEntry(_T("visited:"), lpCacheEntry, &dwSize);

    if(hCacheEnumHandle != NULL)
    {
        urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
    }
    else
    {
        switch(GetLastError())
        {
        case ERROR_INSUFFICIENT_BUFFER:
            lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO) new char[dwSize];
            lpCacheEntry->dwStructSize = dwSize;

            hCacheEnumHandle = FindFirstUrlCacheEntry(_T("visited:"), lpCacheEntry,
                &dwSize);
            if (hCacheEnumHandle != NULL)
            {
                urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
                break;       
            }
            else
            {
                // 查找失敗
                return;
            }
        default:
            {
                FindCloseUrlCache(hCacheEnumHandle);
            }
        }
    }

    bool bSign = true;
    do
    {

        if (FindNextUrlCacheEntry(hCacheEnumHandle, lpCacheEntry, &dwSize))
        {
            urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
        }
        else
        {
            switch(GetLastError())
            {
            case ERROR_INSUFFICIENT_BUFFER:
                lpCacheEntry =
                    (LPINTERNET_CACHE_ENTRY_INFO) new char[dwSize];
                memset(lpCacheEntry,0,dwSize);
                lpCacheEntry->dwStructSize = dwSize;


                if (FindNextUrlCacheEntry(hCacheEnumHandle, lpCacheEntry,
                    &dwSize))
                {
                    urlFiltrateIE(lpCacheEntry->lpszSourceUrlName);
                    break;
                }
                else
                {
                    FindCloseUrlCache(hCacheEnumHandle);
                    bSign = false;
                    break;
                }
                break;
            case ERROR_NO_MORE_ITEMS:
                FindCloseUrlCache(hCacheEnumHandle);
                bSign = false;
                break;
            default:
                FindCloseUrlCache(hCacheEnumHandle);
                bSign = false;
                break;
            }
        }
    } while (bSign);

    // 獲取谷歌瀏覽器的歷史記錄
    char path[MAX_PATH];
    ::SHGetSpecialFolderPathA(NULL,path,CSIDL_LOCAL_APPDATA,FALSE);

    strcat_s(path,"http://google//chrome//User Data//default//History");
    if (PathFileExistsA(path))
    {
        // 谷歌瀏覽器正在運行,強制關閉;關閉后才能得到谷歌瀏覽器的歷史記錄
        if (!IsRunning(_T("chrome.exe")))
        {
            try
            {
                CppSQLite3DB db;
                CppSQLite3Query query;

                db.open(path);
                query=db.execQuery("select url from urls");

                while(!query.eof())
                {
                    CStringA utf8url;
                    utf8url=query.fieldValue("url");
                    ConvertUtf8ToGBK(utf8url);
                    urlFiltrateChrome((CString)utf8url);
                    query.nextRow();

                }
                db.close();
            }
            catch (CppSQLite3Exception& e)
            {
                return;
            }
        }
    }

    // 獲取火狐瀏覽器的歷史記錄
    TCHAR strPath[MAX_PATH] = {0};

    GetModuleFileName(NULL, strPath, MAX_PATH);
    CString strPathTemp(strPath);

    int nPosition = strPathTemp.ReverseFind(_T('//'));

    if (nPosition != -1)
    {
        USES_CONVERSION;

        strPathTemp = strPathTemp.Left(nPosition);
        ::SHGetSpecialFolderPathA(NULL, path, CSIDL_WINDOWS, FALSE);
        CString strDestPath(path);

        strPathTemp += _T("http://MozillaCacheView.exe /stext ");
        strDestPath += _T("http://temp.dat");
        strPathTemp += strDestPath;

        // 文件路徑中不能有空格
        WinExec(T2A(strPathTemp), SW_HIDE);

        // 延時,防止讀寫沖突
        Sleep(1000);
        if (PathFileExists(strDestPath))
        {
            CStdioFile file;
            CString buffer;
            if(file.Open(strDestPath, CFile::modeRead))
            {
                CString strTemp;
                while(file.ReadString(buffer))
                {
                    if (buffer.Find(_T("image/x-icon")) != -1)
                    {
                        file.ReadString(buffer);
                        buffer.Delete(0, buffer.Find(_T("http://"))+7);

                        file.ReadString(strTemp);
                        file.ReadString(strTemp);
                        strTemp.Delete(0, strTemp.Find(_T(": "))+2);

                        urlFiltrateFirefox(buffer, atoi(T2A(strTemp)));
                    }
                }
            }
        }
    }

    Sort();
}

void BrowsHistory::ThreadPro (LPVOID * ptr)
{
    BrowsHistory * pBrowsHistroy = (BrowsHistory*)ptr;
    pBrowsHistroy->InitHistroy();

    // 獲取網址的函數執行完了
    pBrowsHistroy->m_bStatus = true;
}

std::vector<BrowsData> BrowsHistory::GetBrowsHistory (void) const
{
    return m_BrowsHistroy;
}

void BrowsHistory::Sort (void)
{
    stable_sort(m_BrowsHistroy.begin(), m_BrowsHistroy.end(),std::less<BrowsData>());
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热99久久久国产盗摄| 91九色单男在线观看| 中文字幕在线精品| 91成人精品网站| 成人精品视频久久久久| 欧美日韩精品在线观看| 国产做受69高潮| 国产精品一区二区三区免费视频| 久久天堂电影网| 国产在线视频91| 在线一区二区日韩| 国产一区二区三区在线视频| 精品视频在线播放| 亚洲国产日韩欧美在线图片| 亚洲人成五月天| 国产主播喷水一区二区| 91麻豆国产语对白在线观看| 国内精品国产三级国产在线专| 黑人狂躁日本妞一区二区三区| 国产大片精品免费永久看nba| 色先锋资源久久综合5566| 91中文在线观看| 懂色aⅴ精品一区二区三区蜜月| 国产精自产拍久久久久久蜜| 91麻豆国产语对白在线观看| 在线电影欧美日韩一区二区私密| 国产69久久精品成人看| 欧美疯狂xxxx大交乱88av| 久久久久99精品久久久久| 日韩电影大全免费观看2023年上| 午夜伦理精品一区| 成人免费xxxxx在线观看| 精品久久久视频| 欧美多人爱爱视频网站| 精品视频在线观看日韩| 精品国产欧美一区二区三区成人| 欧美性黄网官网| 亚洲精品videossex少妇| 免费97视频在线精品国自产拍| 精品亚洲夜色av98在线观看| 欧美成人精品xxx| 精品国产福利在线| 黄色精品一区二区| 欧美高清性猛交| 国产成人激情视频| 亚洲视频网站在线观看| 国产色综合天天综合网| 91久久精品美女高潮| 亚洲网站在线观看| 国产一区二区香蕉| 欧美一区二区视频97| 中文字幕精品一区久久久久| 日韩在线中文视频| 国产成人97精品免费看片| 国产精品久久婷婷六月丁香| 亚洲欧洲成视频免费观看| 亚洲aa中文字幕| 精品国产一区二区三区久久狼黑人| 欧美日韩激情视频8区| 欧美精品在线视频观看| 亚洲成成品网站| 亚洲成人av在线播放| 欧美大胆在线视频| 在线国产精品播放| 国自在线精品视频| 国产成人精品久久久| 亚洲视频在线免费观看| 亚洲欧美中文日韩在线| 久久久国产影院| 欧美xxxx综合视频| 国产在线a不卡| 亚洲最新视频在线| 欧美裸体男粗大视频在线观看| 日韩精品视频在线免费观看| 中文字幕不卡在线视频极品| 国产精品激情av电影在线观看| xxxx欧美18另类的高清| 色狠狠久久aa北条麻妃| 中文字幕一精品亚洲无线一区| 亚洲综合在线中文字幕| 奇米一区二区三区四区久久| 精品久久久久久亚洲国产300| 在线电影av不卡网址| 久久久精品中文字幕| 亚洲高清av在线| 亚洲色图50p| 国产99视频在线观看| 国产成人高清激情视频在线观看| 成人免费视频在线观看超级碰| 亚洲免费电影在线观看| 国产精品激情av电影在线观看| 欧美性猛交视频| 大荫蒂欧美视频另类xxxx| 欧美精品生活片| 亚洲电影免费观看高清完整版| 亚洲最大福利网站| 欧美一级bbbbb性bbbb喷潮片| 91精品国产99| 中文字幕在线看视频国产欧美在线看完整| 欧美亚洲成人网| 亚洲最新在线视频| 国产成人aa精品一区在线播放| 日韩av手机在线看| 91久热免费在线视频| 国产在线观看一区二区三区| 精品国产依人香蕉在线精品| 欧美黄色三级网站| 欲色天天网综合久久| 成人两性免费视频| 亚洲毛茸茸少妇高潮呻吟| 日韩av三级在线观看| 国产精品久久久久久久久影视| 久久久噜噜噜久久中文字免| 日本最新高清不卡中文字幕| 91在线免费看网站| 一区二区在线视频播放| 亚洲韩国欧洲国产日产av| 中文字幕日韩在线播放| 久久福利视频导航| 高跟丝袜欧美一区| 亚洲精品国产福利| 久久久久日韩精品久久久男男| 国产日韩在线一区| 91成人福利在线| 91情侣偷在线精品国产| 亚洲bt欧美bt日本bt| 亚洲午夜未满十八勿入免费观看全集| 欧美黄色三级网站| 中文日韩在线观看| 日韩国产精品视频| 不卡在线观看电视剧完整版| 久国内精品在线| 精品国产依人香蕉在线精品| 中文字幕欧美日韩va免费视频| 色综合久久悠悠| 日韩精品一区二区视频| 揄拍成人国产精品视频| 日韩在线视频线视频免费网站| 久久香蕉频线观| 亚洲黄色有码视频| 热草久综合在线| 欧美激情va永久在线播放| 国产精品久久在线观看| 久久久久久国产精品久久| 欧美激情女人20p| 日韩av影院在线观看| 97久久久久久| 欧美日韩一区二区在线播放| 国产精品免费看久久久香蕉| 欧美巨乳在线观看| 成人午夜两性视频| 最近2019中文字幕第三页视频| 精品毛片网大全| 日韩在线视频观看| 另类天堂视频在线观看| 国产极品jizzhd欧美| 91爱视频在线| 亚洲影视中文字幕| 激情懂色av一区av二区av| 久久69精品久久久久久国产越南| 九九久久久久久久久激情| 欧美精品videos性欧美| 欧美午夜电影在线| 国产视频精品一区二区三区|