c++ - 如何在给定 ActiveX 控件的 HWND 的情况下获得 COM 接口(interface)?

标签 c++ winapi com activex

我正在尝试编写一些 C(C++ 也很好)实用程序来监视 ActiveX 控件。给定一个窗口的一些 HWND 句柄我想打印

  1. 该 HWND 的 ActiveX 控件公开了哪些属性和哪些方法
  2. 可选地,控件实现了哪些接口(interface)

出于测试目的,我将随机 ActiveX 控件(如 Microsoft Slider 控件)嵌入到 ActiveX Control Test Container 中。这样我就知道控件的HWND确实是一个ActiveX控件的窗口。此外,我知道控件公开了哪些属性/方法,因此我可以测试我的工具。

我目前对 (1) 的解决方案是使用 AccessibleObjectFromWindow HWND 上的函数以获取 IDispatch .它有效,但似乎你真的总是只得到一个可访问的接口(interface)(返回的 IDispatch 只是 IAccessible 接口(interface)的 IDispatch 部分)。我尝试将示例控件的实际 CLSID 作为第三个参数传递给 AccessibleObjectFromWindow但这也无济于事。似乎该功能确实名副其实——您总是只能获得辅助功能界面。 :-)

有人知道这样的“ActiveX spy ”是否可能吗?如果是,怎么办?

最佳答案

你没有

如果您有权访问 activex 控件的实现(例如在 ATL 中),您可以使用查找表来返回拥有 HWND 的控件;您可以将其与 global instance table 结合使用

关于c++ - 如何在给定 ActiveX 控件的 HWND 的情况下获得 COM 接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549827/

相关文章:

c# - 有没有可能用 javascript 调用 C# 函数?

python - 从 Python 获取事件 Excel 工作簿的名称

c++ - Dark GDK 更改显示模式使 Sprite 消失

c++ - 为什么他们更喜欢此代码段中的动态调度

c++ - 如何在没有控制台窗口的情况下从 C++ 启动 .jar 文件

windows - 如何确定 Windows 计算机的身份?

winapi - 导入表、导入地址表、导入名称表有什么区别?

c++ - 使用CreateWindow显示BMP

c# - 如何在 C# 中返回字符串数组并在非托管 C++ 中使用它?

c++ - 循环后保留一个值