2009-10-30 69 views

回答

0
//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]; 
// Want only my Plugin Category 
pcatidImpl[0]=CATID_MyPlugin; 
pcatidReqd[1]=CATID_MyPlugin; 

// Want all Active X Control 
//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();