C#.net コードでは、interface-getAccessibleContextAt
を次のように使用しようとしています。
- 問題の Java アプリケーションについて、メインのウィンドウ ハンドルを特定します。
- を使用して、アプリケーション コンテキストと vmid のポインターを取得します
getAccessibleContextFromHWND
。これらはゼロではなく、getAccessibleContextFromHWND
true を返します。 - これらの値とマウスの位置 (x,y) を使用して、インターフェイスを使用して基になるコントロールのコンテキストをフェッチしようとします
getAccessibleContextAt
。このメソッドは true を返しますが、コントロールのポインターはゼロです。
私が使用しているコードは次のとおりです。
private void GetJavaElementDetails(IntPtr javaAppHandle, int x, int y)
{
if (JABHelper.isJavaWindow(javaAppHandle)==1)
{
Int32 vmid;
IntPtr appContextPointer, ctlContextPointer;
bool result = JABHelper.getAccessibleContextFromHWND(javaAppHandle, out vmid, out appContextPointer);
result = JABHelper.getAccessibleContextAt(vmid, appContextPointer, x, y, out ctlContextPointer);
AccessibleContextInfo acinfo = new AccessibleContextInfo();
IntPtr acinfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(new AccessibleContextInfo()));
Marshal.StructureToPtr(new AccessibleContextInfo(),acinfoPtr, true);
if (JABHelper.getAccessibleContextInfo(vmid, ctlContextPointer, acinfoPtr))
{
acinfo = (AccessibleContextInfo)Marshal.PtrToStructure(acinfoPtr, typeof(AccessibleContextInfo));
}
}
}
JABHelper は、WindowsAccessBridge.dll によって公開されるさまざまなインターフェイスの単なるラッパーです。
ctlContextPointer- たまたま常にゼロです。この問題の解決策は高く評価されます。また、私が何か間違ったことをしている場合はお知らせください。