C++ 如何跟踪由进程创建的ActiveX控件?

C++ 如何跟踪由进程创建的ActiveX控件?,c++,c,windows,com,activex,C++,C,Windows,Com,Activex,我想跟踪某个进程创建的ActiveX控件。为了简化这个问题,我首先只想监视当前流程。我想这样做,以便检查是否有ActiveX控件支持,如果支持,则检查给定的HWND是否属于该ActiveX控件(以便我可以将HWND映射到ActiveX控件) 有人有这方面的经验吗?我的第一个想法是使用API挂钩来监视调用,但我了解到这并不适用于所有情况。一些谷歌研究揭示了关于安装自定义类工厂的内容-这将如何工作?您可能会发现,使用UI自动化和活动辅助功能API,您可以找到需要了解的内容: 如果您确定需要这样

我想跟踪某个进程创建的ActiveX控件。为了简化这个问题,我首先只想监视当前流程。我想这样做,以便检查是否有ActiveX控件支持,如果支持,则检查给定的HWND是否属于该ActiveX控件(以便我可以将HWND映射到ActiveX控件)


有人有这方面的经验吗?我的第一个想法是使用API挂钩来监视调用,但我了解到这并不适用于所有情况。一些谷歌研究揭示了关于安装自定义类工厂的内容-这将如何工作?

您可能会发现,使用UI自动化和活动辅助功能API,您可以找到需要了解的内容:

如果您确定需要这样做,请注意以下几点
CoCreateInstance
本质上是一个方便的函数,它包装了
CoGetClassObject
IClassObject::CreateInstance

如果要使用该技术,则也必须钩住
CoGetClassObject
,因为进程可能直接使用它


当然,没有法律规定任何库或DLL都不能提供自己的方便函数,而这些函数完全绕过COM注册表。注册表本身很方便-如果您知道DLL的位置,可以使用
LoadLibrary
GetProcAddress
查找
DllGetClassObject
并检索类对象,而无需涉及COM库,实际上,没有注册DLL。

我最终连接了CoCreateInstance和CoGetClassObject来跟踪所有正在创建的COM对象。

+1感谢您指出,
CoCreateInstance
基本上只是一个包装函数,我没有意识到这一点。