在Perl中,如果我有一个窗口对象的HWND,我如何使用该句柄访问该COM对象?我查看了Win32 :: OLE,但我得到的最接近的是GetActiveObject
方法,它需要一个类。
答案 0 :(得分:2)
use Win32::GuiTest;
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指针。