Click here to Skip to main content
Click here to Skip to main content

Generic AutoFill

, 14 Apr 2006
Rate this:
Please Sign up or sign in to vote.
Generic AutoFill can automatically fill a html based form using some PC-based stored data. it’s an application very similar to Google Autofill.

Generic AutoFill Sample Image

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.

 

//
// IOleObjectWithSite Methods
//
STDMETHODIMP CPub::SetSite(IUnknown *pUnkSite)
{
    if (!pUnkSite)
    {
        ATLTRACE(_T("SetSite(): pUnkSite is NULL\n"));
    }
    else
    {
        // Query pUnkSite for the IWebBrowser2 interface.
        m_spWebBrowser2 = pUnkSite;
        if (m_spWebBrowser2)
        {
            // Connect to the browser in order to handle events.
            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:

//
// IDispatch Methods
//
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)
    {
        //
        // The parameters for this DISPID are as follows:
        // [0]: Cancel flag  - VT_BYREF|VT_BOOL
        // [1]: IDispatch* - Pointer to an IDispatch interface. 
        //
        // If you cancel here, ALL popups will be blocked.
        //
    case DISPID_NEWWINDOW2:
        // Set the cancel flag to block popups
        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)
    {
        // Don't attach to Windows Explorer
        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.

 

Save Form As

 

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.

AutoFill

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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Vishal Swarankar
Software Developer
India India
No Biography provided

Comments and Discussions

 
GeneralFrame compatible Pinmemberantonello14-Mar-08 3:37 
GeneralHowTo install Pinmemberantonello14-Mar-08 3:35 
GeneralIE7 cannot open new page Pinmemberfifth811823-Jan-08 16:58 
Generalcrashing(has Just-In-Time debugger) Pinmemberbrad b27-Dec-07 5:40 
GeneralRe: crashing(has Just-In-Time debugger) PinmemberVishal Swarankar28-Dec-07 0:56 
GeneralRe: crashing(has Just-In-Time debugger) Pinmemberbrad b3-Jan-08 1:47 
QuestionHow to install the toolbar on Internet Explorer ? PinmemberDumitruC3-Nov-07 6:31 
GeneralRe: How to install the toolbar on Internet Explorer ? PinmemberVishal Swarankar28-Dec-07 0:58 
GeneralCross domain iframe Pinmember101623-Sep-07 21:35 
GeneralRe: Cross domain iframe PinmemberVishal Swarankar13-Oct-07 20:25 
QuestionIE hangs when auto-fill is called Pinmemberkobelakers7616-Jul-07 9:25 
AnswerRe: IE hangs when auto-fill is called PinmemberVishal Swarankar13-Oct-07 20:20 
Questionusing AutoFill Pinmembervijay_sagi8-Apr-07 23:32 
AnswerRe: using AutoFill Pinmember1scouser12-Jun-07 12:03 
GeneralRe: using AutoFill PinmemberVishal Swarankar13-Oct-07 20:18 
QuestionCan Javascript be embedded instead ? PinmemberAndyzyx9-Feb-07 8:37 
AnswerRe: Can Javascript be embedded instead ? PinmemberVishal Swarankar13-Oct-07 20:16 
GeneralSource for Generic Autofill Pinmemberjimmyy22-Dec-06 0:24 
AnswerRe: Source for Generic Autofill PinmemberVishal Swarankar15-Jan-07 17:11 
Questionfatal error LNK1250 when I link with an MFC app Pinmemberibrahim.dina15-Nov-06 12:49 
AnswerRe: fatal error LNK1250 when I link with an MFC app PinmemberVishal Swarankar15-Nov-06 17:18 
Questionjavascript pages Pinmemberibrahim.dina7-Nov-06 13:31 
AnswerRe: javascript pages PinmemberVishal Swarankar7-Nov-06 17:32 
Question2 forms on the same website Pinmemberibrahim.dina7-Nov-06 13:28 
AnswerRe: 2 forms on the same website PinmemberVishal Swarankar7-Nov-06 17:29 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140709.1 | Last Updated 15 Apr 2006
Article Copyright 2006 by Vishal Swarankar
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid