Introduction
AutoFill is implemented in ATL as a browser helper object (BHO). A BHO is a DLL that will attach itself to every new instance of Internet Explorer. In the BHO you can intercept Internet Explorer events, and access the browser window and document object model (DOM). This gives you a great deal of flexibility in modifying Internet Explorer behavior as well as some added functionality to use your utility as an IE-plug-in.
There are several advantages to using a BHO over an application that continually scans open windows for keywords in the title. The BHO is event driven and does not run in a loop or use a timer, so it doesn't use any CPU cycles if nothing is happening.
AutoFill
The AutoFill option in mouse right click on Internet Explorer enables you to automatically complete forms on the web. Enter your information and it's stored securely on your own computer. When you want to fill a form with previously entered data for fields in the web page, simply right click on the page and select AutoFill then choose Fill Form. In the next step you can select a form data from previously saved form.
To save initial data fill the form right click the page and select AutoFill and then Save Form As option. It�ll ask a form name for saving entered data. AutoFill stores personal data where only you can access it - your own computer. None of this information is ever sent to me or to any other server.
After filling form if you see that the required data is not in the chosen form then either you can flush the entered data using AutoFill->Flush Form option or you can manually enter the data.
Better than Google AutoFill
It�s better than Google AutoFill. I am figuring out some good features.
Fields Independent
It doesn�t depend on the already hard-coded html fields as Google AutoFill restricts user to fill only those fields which Google have given in their AutoFill template form. In my AutoFill any type of html form with any type of html fields can be saved as a template form data with a particular name. In this way user is not restricted to use a certain data for form filling even every type you are using a new form you can create a template data for this particular form and can use it later.
BHO Implementation
A minimal BHO is a COM server DLL that implements IObjectWithSite. Create a new ATL Project and accept the default settings (attributed, DLL). Add an ATL Simple Object, give it a name and on the Options tab select Aggregation: No and Support: IObjectWithSite.
The only method on IObjectWithSite that must be implemented is SetSite(). IE will call SetSite with a pointer to IUnknown which we can query for a pointer to IWebBrowser2, which gives us the keys to the house.
STDMETHODIMP CPub::SetSite(IUnknown *pUnkSite)
{
if (!pUnkSite)
{
ATLTRACE(_T("SetSite(): pUnkSite is NULL\n"));
}
else
{
m_spWebBrowser2 = pUnkSite;
if (m_spWebBrowser2)
{
HRESULT hr = ManageBrowserConnection(ConnType_Advise);
if (FAILED(hr))
ATLTRACE(_T("Failure sinking events from IWebBrowser2\n"));
}
else
{
ATLTRACE(_T("QI for IWebBrowser2 failed\n"));
}
}
return S_OK;
}
Once we have the pointer to IWebBrowser2 we can hook up to the DWebBrowserEvents2 connection point in order to receive the NewWindow2 event. This event is sent every time a new window is about to.
To create the event handler we have to derive our class from IDispatchImpl.
Then add the Invoke method as follows:
STDMETHODIMP CPub::Invoke(DISPID dispidMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pvarResult,
EXCEPINFO* pExcepInfo, UINT* puArgErr)
{
if (!pDispParams)
return E_INVALIDARG;
switch (dispidMember)
{
case DISPID_NEWWINDOW2:
pDispParams->rgvarg[0].pvarVal->vt = VT_BOOL;
pDispParams->rgvarg[0].pvarVal->boolVal = VARIANT_TRUE;
break;
default:
break;
}
return S_OK;
}
One problem which occurs with BHO is that even with no open browser windows the linker will sometimes fail because some process is using the BHO, forcing you to reboot the computer to release it. The reason is that Windows Explorer also uses IE for its GUI, and so also loads the BHO. Since we want our BHO to load only when we launch IE, so I am changing DllMain so that it doesn't get loaded by Windows Explorer. This should eliminate the linker problem.
if (dwReason == DLL_PROCESS_ATTACH)
{
TCHAR pszLoader[MAX_PATH];
GetModuleFileName(NULL, pszLoader, MAX_PATH);
CString sLoader = pszLoader;
sLoader.MakeLower();
if (sLoader.Find(_T("explorer.exe")) >= 0)
return FALSE;
g_hinstPub = _AtlBaseModule.m_hInst;
}
Now not going in more details of BHO, I am continuing with Form Handler.
I have created three menu option with mouse right click.
1. Save Form As
This option supports an event handler which saves template data for a particular form at a pre-defined location which you can later use for AutoFilling the form.
2. AutoFill
This option supports actual AutoFill functionality. On choosing this option it opens a dialog where user can select a template data file from previously saved data.
3 Flush Form
If you don�t want to submit the auto filled form then you can flush the form by choosing this option
Support Taken:
I am taking support of article Popup Window Blocker by John Osborn. Thank you John thanx for your article.