Perl では、ウィンドウ オブジェクトの HWND がある場合、そのハンドルを使用してその COM オブジェクトにアクセスするにはどうすればよいですか? 私は Win32::OLE を見ましたが、最も近いGetActiveObject
ものはクラスを期待するメソッドでした。
3 に答える
アクセス可能なオブジェクトから HWND または場所を取得し、Windows API で操作します。
use Win32::GuiTest;
HWND を使用する
my $hwnd = $ao->WindowFromAccessibleObject();
my $name = Win32::GuiTest::GetWindowText($hwnd);
ウィンドウは COM オブジェクトではないため、HWND から COM インターフェイス ポインターを取得する標準的な方法はありません。ウィンドウ ハンドルを含む基本的な Windows API は、OLE および COM の発明よりも前に存在します。特定のウィンドウの実装は、COM インターフェイスを介してその機能の一部またはすべてを公開する場合がありますが、それらのインターフェイスはアプリケーション固有になります。
制御するウィンドウがパブリック COM インターフェイスを公開していることが文書化されている場合、そのウィンドウのドキュメントには、ウィンドウにインターフェイス ポインターを照会する方法も記載されています。ほとんどの場合、アプリケーション固有のウィンドウ メッセージを送信する必要があります。
HWNDからIAccessibleインターフェイスを取得する場合は、WM_GETOBJECTを使用してみてください(注:Perlでウィンドウメッセージを送信する方法があると思います。Perlの知識がないことは十分に確立されています)。
誰もがこのようにするわけではないので、何らかの方法で失敗に対処するようにしてください。たとえば、Internet ExplorerはWM_HTML_GETOBJECTを公開して、IHTMLDocument2ポインターを取得します。