Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / programming / Internet

How to Open Popup Blocker Settings Window of Internet Explorer Programmatically

4.71/5 (3 votes)
8 Apr 2009CPOL2 min read 26.8K  
How to open Popup Blocker Settings window of IE programmatically?

Well, you can open popup blocker settings window of IE programmatically with the help of "DisplayPopupWindowManagementDialog" function in the "C:\WINDOWS\system32\inetcpl.cpl".

But here, rather than just showing a mysterious function, I would like to explain the methods by which I found out the name of the function.

This question was asked by someone on Codeproject and at that time, I was also unaware of any function for this. However, I found it interesting, so just decided to have a try.

At first, I took this "Popup Blocker Settings " dialog in Internet Explorer. My first intention was to find out the DLL name which created the dialog. There is an application called WinID[^] with which we can find which DLL created a particular window. In one of my previous posts, I explained How to find which DLL / EXE created a window [^] using code. Below is a screenshot of what WinID showed me for the "Popup Blocker Settings" dialog.

Image 1

It told me that "USER32.dll" has created the dialog. Liar... I was very sure that user32.dll isn't the real DLL behind it. So this technique to find the DLL didn't really work. So I had to find another way...

Every window has a thread associated with it. If you have the window handle, you can easily retrieve the thread Id associated with it using the GetWindowThreadProcessId function. Anyway, I am not going to code for this. Tools like spy++, WinID display the thread id of the window if we select a window using it. So the Thread ID displayed in Spy++ was 0xB94 (2964 in decimal).

If we took the properties of a process in the process explorer, it will list all the threads in the process and each thread's call stack. So the thing next to do is to select the iexplorer process, select the thread with ID 2964 and take its call stack.

Image 2

And in the call stack, there was only one unfamiliar DLL and function, the "inetcpl.cpl" and the DisplayPopupWindowManagementDialog function in it. So I found out the "inetcpl.cpl" file in the system32 folder and when double clicked on it, huiii it shows the "internet options" dialog.

The control panel files (.cpl), are just a DLL with a some special export functions (If you want to know more about control panel files, I suggest you read Paul DiLascia's Q&A[^] article). With the dependency walker, I confirmed the presence of DisplayPopupWindowManagementDialog in it. But to call this function, I need to find how it is declared, what are all the arguments, etc. Fortunately, someone else has already documented the function proto and with a Google search, I was able to find it out. Happy ending!!!!

And ho ya, here is the sample code:

C++
typedef BOOL (WINAPI *DisplayPopupWindowP)( HANDLE hWnd, LPCTSTR lpCaption );
void CDialogBasedDlg::OnBnClickedButton1()
{
     HMODULE hModule = LoadLibrary( _T("inetcpl.cpl") );
     DisplayPopupWindowP DisplayPopupWindowManagementDialog =
                         ( DisplayPopupWindowP)GetProcAddress(hModule,
                           "DisplayPopupWindowManagementDialog" );
     if( !DisplayPopupWindowManagementDialog )
     {
          return;//error
     }
     DisplayPopupWindowManagementDialog( m_hWnd, 
                                        _T("www.Sitetounblock.com"));
}

License

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