Как я могу отслеживать элементы управления ActiveX, созданные процессом? - PullRequest
3 голосов
/ 07 апреля 2011

Я бы хотел отслеживать элементы ActiveX, созданные каким-либо процессом. Чтобы упростить проблему, я сначала хотел бы отслеживать только текущий процесс. Я хочу сделать это, чтобы я мог проверить, поддерживает ли какой-либо элемент управления ActiveX IOleWindow и, если да, принадлежит ли данный HWND этому элементу управления ActiveX (чтобы я мог сопоставить HWND с элементами управления ActiveX).

Кто-нибудь имеет опыт работы с этим? Моей первой идеей было использовать перехват API для отслеживания вызовов CoCreateInstance , но я прочитал, что это работает не во всех случаях. Некоторое исследование Google показало http://www.pocketsoap.com/sf/activation.html, в котором говорится об установке фабрики пользовательских классов - как это будет работать?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2011

Вы можете узнать, что вам нужно знать, используя API автоматизации пользовательского интерфейса и Active Accessibility:

Если вы уверены, что выНужно сделать это, учтите следующее.CoCreateInstance - это, по сути, вспомогательная функция, которая охватывает CoGetClassObject и IClassObject::CreateInstance.

Если вы собираетесь использовать эту технику, вам, следовательно, придется также подключить CoGetClassObject, поскольку процесс может ее использоватьнепосредственно.

И, конечно, нет закона, согласно которому ни одна библиотека или DLL не могут обеспечить свои собственные удобные функции, которые полностью обходят реестр COM.Сам реестр удобен - если вы знаете, где находится DLL, вы можете использовать LoadLibrary, GetProcAddress, чтобы найти DllGetClassObject и извлечь объект класса без использования библиотек COM и даже без регистрации DLL.

0 голосов
/ 01 июня 2011

В итоге я перехватил CoCreateInstance и CoGetClassObject для отслеживания всех создаваемых COM-объектов.

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