我需要自动化一个位于IE浏览器网站内的Java Applet.我知道我可以使用Java Access Bridge与Java应用程序进行交互,但是我无法找到如何将其连接到Applet.
我知道GetAccessibleContextFromHWND(..)我认为可以使用的Java Bridge方法.不幸的是,当我使用Spy ++尝试获取Applet的HWND时,我又回来了,所以看起来无法使用通常的FindWindow(..)Windows API函数来完成.
如何使用Java Access Bridge访问和控制Java Applet?
我有一个示例Java应用程序,我下载时javaaccessablity-2.0.2使用Java Accessibility(通过Java Access Bridge WindowsAccessBridge-32.dll).虽然它getAccessibleContextFromHWND成功调用它返回false.请注意,我通过Inspect工具验证了hWnd的正确值.
我在Windows 64位系统中安装了64位Java SDK.以下是我试过的代码.我也尝试过使用WindowsAccessBridge-64.dll,但它提供了相同的行为,即vmID和_acParent返回为零而不是非零值.
class Program
{
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static bool getAccessibleContextFromHWND(IntPtr hwnd, out Int32 vmID, out Int64 acParent);
[DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl, ThrowOnUnmappableChar = true, CharSet = CharSet.Unicode)]
private extern static void Windows_run();
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
static void Main(string[] args)
{
Int32 vmID = 0;
Int64 _acParent =0;
Windows_run();
IntPtr hWnd = (IntPtr)FindWindow("SunAwtFrame","Standalone SwingApp"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java Access Bridge从C++应用程序中获取有关Swing组件的信息.但是,我注册的回调都没有被调用.我尝试在每个句柄上调用windows然后调用IsJavaWindow(),但它总是返回false.为什么它显然不起作用的任何想法?
我认为这是我的应用程序而不是桥接安装的问题,因为演示的Monkey和Ferret程序工作,initializeAccessBridge()返回true,调试器显示WindowsAccessBridge dll已加载.
我在Windows Vista上使用Java 6,更新13,我认为访问桥的版本2.0.1.
JavaAccess::JavaAccess(void)
{
using namespace std;
BOOL isInitialized = initializeAccessBridge();
if(isInitialized)
{
cout << "Bridge Initialized!" << endl;
}
else
{
cout << "Initialization failed!" << endl;
return;
}
EnumWindows((WNDENUMPROC)EnumWndProc, NULL);
SetJavaShutdown(OnJavaShutdown);
SetFocusGained(OnFocusGained);
SetMouseClicked(OnMouseClicked);
}
JavaAccess::~JavaAccess(void)
{
shutdownAccessBridge();
}
void JavaAccess::OnJavaShutdown( long vmID )
{
using namespace std;
cout << "Java shutdown!" << endl;
}
void JavaAccess::OnFocusGained( long vmID, FocusEvent event, AccessibleContext context )
{
using namespace std;
cout << "Focus Gained!" << …Run Code Online (Sandbox Code Playgroud) 在 Java 1.7 中,Java Access Bridge 从一开始就捆绑在一起。它表示您所需要做的就是运行jabswitch.exe -enable以启用此特定 JRE 的 JAB。
当您从安装程序获取 JRE 时,此方法可以正常工作。但是,当仅部署适用于 Windows 的 Java 应用程序时,您可能需要捆绑 JRE 以便于安装。捆绑JRE后,似乎无法激活Java Access Bridge
有没有办法在捆绑的 JRE 中启用 Java Access Bridge?
我有一个 Java 应用程序,我想对其进行自动化测试。不幸的是,应用程序窗口仅注册为 SunAWTFrame,这意味着没有任何控件会暴露给典型的窗口分析和自动化工具。
我的搜索引导我使用 C# 并在 C# 程序中利用 Java Access Bridge DLLS 来实现自动化。
有人有这方面的经验吗?
Oracle 提供了带有一些 DLL 的 JavaAccessBridge (JAB),以帮助解决此问题,这是我在阅读了互联网上的一些文章后了解到的。有一些代码示例,但我现在还没有真正理解它。通过分解,我认为这就是需要实现的目标:
我对 C# 的了解不如对 Java 的了解,但这并不能阻止我。
如果有人可以提供帮助、指导、指示或任何帮助我入门的东西,那就太棒了。
需要通过Java Access Bridge 连接到JAWS和NVDA的可能性.据我所知,JavaFX中不支持Assistive Technologies(与Swing不同).
我发现这个项目名为fxaccessible,但它并不适合我的情况.
如何在JavaFX程序中启用对辅助技术的支持?
我可以使用Java Access Bridge事件从 Java 应用程序中的 UI 控件(按钮/编辑框/复选框等)捕获文本。我怎样才能:
使用 Java Access Bridge API 调用?