2010-05-02 2 views
1

Мне нужно отобразить список элементов управления ActiveX для пользователя. Он должен показать имя и описание управления.Как перечислить все установленные элементы управления ActiveX?

Как запросить Windows на установленных элементах управления?

Есть ли способ дифференцировать элементы управления с серверов автоматизации COM?

ответ

3

погуглить для «перечислить элементы управления ActiveX» дать это как первый результат:

http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c5527/Listing-All-Registered-ActiveX-Controls.htm

Хотя я хотел бы добавить, что вам не нужно вызывать AddRef() на pCatInfo начиная CoCreateInstance() вызовов, которые для вас.

Это, как я хотел бы сделать это:

#include <cstdio> 
#include <windows.h> 
#include <comcat.h> 

int main() 
{ 
    // Initialize COM 
    ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 
    // Obtain interface for enumeration 
    ICatInformation* catInfo = NULL; 
    HRESULT hr = ::CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
     NULL, CLSCTX_INPROC_SERVER, IID_ICatInformation, (void**)&catInfo); 

    // Obtain an enumerator for classes in the CATID_Control category. 
    IEnumGUID* enumGuid = NULL; 
    CATID catidImpl = CATID_Control; 
    CATID catidReqd = CATID_Control; 
    catInfo->EnumClassesOfCategories(1, &catidImpl, 0, &catidReqd, &enumGuid); 

    // Enumerate through the CLSIDs until there is no more. 
    CLSID clsid; 
    while((hr = enumGuid->Next(1, &clsid, NULL)) == S_OK) 
    { 
     BSTR name; 
     // Obtain full name 
     ::OleRegGetUserType(clsid, USERCLASSTYPE_FULL, &name); 
     // Do something with the string 
     printf("%S\n", name); 
     // Release string. 
     ::SysFreeString(name); 
    } 

    // Clean up. 
    enumGuid->Release(); 
    catInfo->Release(); 
    ::CoUninitialize(); 
    return 0; 
} 
1

по какой-то причине другой пример Отправленные сегментный ошибки для меня. Вот мой удар в нем:

https://gist.github.com/810398

Хотя этот код C, кажется, не перечислить их все для меня. См. how do you enumerate WIN32OLE available servers? для получения дополнительных ответов, я думаю.

+0

Теперь, если я смогу понять, как это сделать с Powershell, это было бы потрясающе. Указатель на это в C# или VBScript приблизит меня к этому. –

Смежные вопросы