Listing All Registered ActiveX Controls

Environment: Visual C++ 6.0.


This code is meant to illustrate how to use COM in order to retrieve a list of all the registered ActiveX controls in your system. The demo application (see screen shot above) displays the names of all located ActiveX controls in a listbox.

Source Code

//Initialise COM libraries
CoInitialize (NULL);

//The Component Category Manager implemented by System implements 
//this interface
ICatInformation *pCatInfo=NULL;

//Create an instance of standard Component Category Manager
HRESULT hr=CoCreateInstance (CLSID_StdComponentCategoriesMgr ,
                             IID_ICatInformation ,
                             (void **)&pCatInfo);

//Increase ref count on interface
pCatInfo->AddRef ();

//IEnumGUID interface provides enumerator for enumerating through 
//the collection of COM objects

//We are intersted in finding out only controls so put CATID_Control 
//in the array
CATID pcatidImpl[1];
CATID pcatidReqd[1];

//Now enumerate the classes i.e. COM objects of this type.
pCatInfo->EnumClassesOfCategories (1,
                                   pcatidReqd ,

//Enumerate as long as you get S_OK
CLSID clsid;

while( (hr= pEnumGUID->Next( 1, &clsid, NULL ))==S_OK )
 BSTR bstrClassName;   //Get the information of class

 //This is what MSDN says about the parameters
 USERCLASSTYPE_FULL     The full type name of the class. 
 USERCLASSTYPE_SHORT    A short name (maximum of 15 characters) that 
                        is used for popup menus and the Links dialog 
 USERCLASSTYPE_APPNAME  The name of the application servicing the class 
                        and is used in the Result text in dialog boxes. 
 OleRegGetUserType (clsid,USERCLASSTYPE_FULL,&bstrClassName);
 CString strControlName(bstrClassName);
 //Add string in our listbox
 m_list1.AddString (strControlName);

//we are done so now release the interface ptr
pCatInfo->Release ();

CoUninitialize ();

The program first intialises the COM libraries. Then it creates an instance of standard component category manager

HRESULT hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr,
                            (void **)&pCatInfo);

IcatInformation interface provides the information about COM classes and categories. IEnumGUID interface provides enumerator for iterating through the collection of COM classes. Then we enumerate the controls with a call to EnumClassesOfCategories.As we are interested in only controls We fill the array with CATID_Control.Next we enumerate through the collection ,get the class name And put it in the listbox.


Download demo - 11 Kb


  • Great article.I was jst wondering whether the same thing would be possible in c#?

    Posted by shashank_v1 on 09/28/2005 07:28am

    Im doing a project in C# and i would like to know if i could list all the activeX controls on the system using C#.I donno if C# has all the inbuilt functionality that c++ has with regard to ActiveX and COM.

  • Retreive the Control properties just by having the name

    Posted by Legacy on 09/15/2003 12:00am

    Originally posted by: Hajer

    Hi All,

    I created two activeX controls. the second references the name of the first control, i want to insert those controls in the same application form (VB for example), and i want that the second activex could search for the control correspoding for the name i references, then retreives all the matching properties.

    Best Regards.

  • list all the properties of a control.

    Posted by Legacy on 04/18/2003 12:00am

    Originally posted by: pathman

    This is very cool. Is it possible to list all the properties of a specific activeX control?

  • How can I get other control's Iunknow interface point in the same container?

    Posted by Legacy on 09/17/2002 12:00am

    Originally posted by: peter

    How can I get other control's Iunknow interface point in the same container?

  • Controls ok but dll's ?

    Posted by Legacy on 10/30/2001 12:00am

    Originally posted by: arkam

    Your code is great but how can i retrieve ALL the ActiveX registered on my computer (and not only controls) ?


Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

  • Anthony Christie, the Chief Marketing Officer for Level Communications, is responsible for customer experience, worldwide marketing and product management. In this informative asset, he shares his insights into why a private network connection to cloud-bases applications is the right decision for your enterprise. Download now to find out more.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date