2

在 Perl 中,如果我有一个窗口对象的 HWND,如何使用该句柄访问该 COM 对象?我查看了 Win32::OLE,但我得到的最接近的是GetActiveObject方法,它需要一个类。

4

3 回答 3

2

从可访问对象中获取 HWND 或位置并使用 Windows API 对其进行操作:

use Win32::GuiTest;

使用 HWND

my $hwnd = $ao->WindowFromAccessibleObject();
my $name = Win32::GuiTest::GetWindowText($hwnd);
于 2009-11-01T22:57:47.780 回答
2

没有从 HWND 获取 COM 接口指针的标准方法,因为窗口不是 COM 对象。包括窗口句柄在内的基本 Windows API 早于 OLE 和 COM 的发明。特定窗口的实现可能会通过 COM 接口公开其部分或全部功能,但这些接口将是特定于应用程序的。

如果记录了您要控制的窗口公开了一个公共 COM 接口,则该窗口的文档还将告诉您如何在窗口中查询接口指针。最有可能的是,它需要发送特定于应用程序的窗口消息

于 2009-11-06T18:21:36.483 回答
0

如果您希望从 HWND 获取 IAccessible 接口,您可以尝试使用WM_GETOBJECT(注意:我假设在 Perl 中有某种方式可以发送窗口消息 — 众所周知,我没有 Perl 知识)。

不是每个人都这样做,所以一定要以某种方式处理失败。例如,Internet Explorer 公开WM_HTML_GETOBJECT以获取 IHTMLDocument2 指针。

于 2009-11-06T18:25:25.493 回答