Listing All Registered ActiveX Controls | CodeGuru

Listing All Registered ActiveX Controls

Environment: Visual C++ 6.0. Overview 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); […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 6, 2001
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: Visual C++ 6.0.

Overview

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 ,
                             NULL,
                             CLSCTX_INPROC_SERVER,
                             IID_ICatInformation ,
                             (void **)&pCatInfo);

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

//IEnumGUID interface provides enumerator for enumerating through 
//the collection of COM objects
IEnumGUID *pEnumGUID=NULL;

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

//Now enumerate the classes i.e. COM objects of this type.
pCatInfo->EnumClassesOfCategories (1,
                                   pcatidImpl,
                                   0,
                                   pcatidReqd ,
                                   &pEnumGUID);

//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
                        box.
 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,
                            NULL,
                            CLSCTX_INPROC_SERVER,
                            IID_ICatInformation,
                            (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.

Downloads

Download demo – 11 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.