如何从Win32 :: OLE中的HWND获取COM对象?

时间:2009-11-01 22:46:40

标签: perl winapi ole

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

3 个答案:

答案 0 :(得分:2)

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

use Win32::GuiTest;

使用HWND

my $hwnd = $ao->WindowFromAccessibleObject();
my $name = Win32::GuiTest::GetWindowText($hwnd);

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

如果您希望从HWND获取IAccessible接口,可以尝试使用WM_GETOBJECT(注意:我假设在Perl中有一些发送窗口消息 - 已经确定我没有Perl知识)。

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