在 C#.net 代码中,一直在尝试使用接口getAccessibleContextAt
——以如下方式。
- 对于所关注的 Java 应用程序,我确定了主窗口句柄
- 我使用
getAccessibleContextFromHWND
. 这些不是零并getAccessibleContextFromHWND
返回true。 - 使用这些值和鼠标位置 (x,y) 尝试使用 interface 获取底层控件的上下文
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- 总是碰巧为零。对此问题的任何解决方案将不胜感激。如果我做错了什么,请告诉我。