views:

107

answers:

2

First, here is a picture of what I see http://img713.imageshack.us/img713/4797/iedrop.png

I need an solution to clear addressbar dropdawn, but not using ClearMyTracksByProcess or IE dialogs. I need to delete only a specific URL and all his traces.

I deleted manually all traces of that URL in:

  1. Users\\AppData\Local\Microsoft\Windows\Temporary Internet Files*
  2. Users\\AppData\Local\Microsoft\Windows\History*
  3. Users\\Recent*

also that URL can be found in:

4) Users\\AppData\Local\Microsoft\Internet Explorer\Recovery\High

Now I made an BootTime program that searches for 8 and 16 bit charsets string in all my system disc files. URL wasn't found anywhere, but after logging and starting IE, the URL is still there. I suspect this is related to 4), but can't understand how.

A: 

Address bar urls are stored in the TypedUrls registry key. See this project which claims to enum and delete them (I haven't tested it).

The History items in the dropdown are stored in the Url History database. Use IUrlHistoryStg::DeleteUrl().

jeffamaphone
That are not TypedUrls. TypedUrls can be seen on the first line in the picture and I know how to delete them from registry.
ssianky
Oh, well, then. Use IUrlHistoryStg.
jeffamaphone
IUrlHistoryStg::DeleteUrl() doesn't work too. It deletes VisitedUrls but not from addressbar.
ssianky
IShellFolder/IEnumIDList interfaces on CSIDL_HISTORY deletes history too, but again not from addressbar
ssianky
Well, that's the data source. IE is probably caching them. Are you restarting the browser?
jeffamaphone
+1  A: 

Finally I found solution.

HRESULT CreateCatalogManager(ISearchCatalogManager **ppSearchCatalogManager)
{
    *ppSearchCatalogManager = NULL;

    ISearchManager *pSearchManager;
    HRESULT hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_SERVER, IID_PPV_ARGS(&pSearchManager));
    if (SUCCEEDED(hr))
    {
        hr = pSearchManager->GetCatalog(L"SystemIndex", ppSearchCatalogManager);
        pSearchManager->Release();
    }
    return hr;
}

{

    ISearchCatalogManager *pCatalogManager;
    HRESULT hr = CreateCatalogManager(&pCatalogManager);

    if (SUCCEEDED(hr))
    {
        pCatalogManager->Reset();
        pCatalogManager->Release();
    }
}
ssianky
Don't forget to 'accept' your own answer.
Johnsyweb