Как перечислить все установленные элементы управления ActiveX? - PullRequest
1 голос
/ 03 мая 2010

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

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

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

Ответы [ 2 ]

3 голосов
/ 03 мая 2010

Google для «перечисления элементов управления 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 голос
/ 04 февраля 2011

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

https://gist.github.com/810398

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...