我可以使用WindowsAccessBridge.dll来访问java窗口(SwingSet2),并使用dll方法与控件进行交互。 我可以使用显示here的代码迭代树(java控件),并从控件获取信息, 我可以在文本框中执行类似SetText的操作,或者将单击操作发送到按钮等。
但是,我发现可访问性上下文不一致: 当我使用来自' setMousePressedFP'的可访问性上下文时,SetText方法非常有效。单击文本框后,dll的方法。
但是,当我尝试在文本框中设置文本时,我无法通过迭代控制树来获得可访问性上下文,尽管我验证了其他信息,例如文本框的大小和其他属性是相同的。
来自this doc:
"函数GetAccessibleContextAt和 GetAccessibleContextWithFocus检索AccessibleContext对象, 这是一个神奇的cookie(实际上是一个Java对象引用) 可访问对象和JVM cookie。 "
但是,每次单击文本框时,可访问性上下文都不同(不重新启动java程序)。 vmID匹配eveytime。 如果AccessibleContext确实是一个Java Object引用,那么每次单击同一个控件时都不能获得相同的AccessibleContext编号(不重新启动java窗口)?并且不应该在树中提供AccessibleContext编号吗?
最糟糕的是,当我使用从迭代控制树获得的AccessibleContext时,settext方法不起作用。
编辑以进一步澄清问题:
我点击同一个文本框,所以我希望windowsaccessdll函数返回对同一控件的引用。作为一个long值,accessibeContext在每次单击时都是不同的,但是它的确定,因为SetText方法每次都使用不同的long值,我可以在文本框中看到新的文本集。 问题是当我迭代控制树并且从树迭代获得的可访问性上下文不适用于SetText方法时。 更具体地说 - AccessibleContext如何与c指针进行比较 - 当我为特定控件获取它时,c指针总是相同的。 AccessibleContext似乎是一个8位长的值,根据文本框内单击鼠标的位置,该值相差几十或几百。
先谢谢。