2

Java Access Bridge API 文档指出:

Java Access Bridge API 调用包含在AccessBridgeCalls.h 其中并使用它们,您还必须编译该文件AccessBridgeCalls.c,该文件充当您的应用程序和 WindowsAccessBridge.dll.

但是当我试图用AccessBridgeCalls.h&创建一个 dll 时AccessBridgeCalls.c,它说缺少AccessBridgeDebug.h文件。

如何调用该initiateAccessBridge()方法?我希望执行类似于 JavaMonkey.exe 的任务,例如识别 Java Swing 应用程序中的组件。

当我isJavaWindow(int)从 Access Bridge 调用时,它总是为所有处理程序返回 false。

4

1 回答 1

0

JABA 依赖于 Windows 消息传递机制来执行进程间通信。您必须设置一个线程来运行消息泵循环并initiateAccessBridge()在该线程中调用,否则某些方法isJavaWindow()将始终返回false

这是一个 C# 参考:

            var accessBridge = new AccessBridge();
            // Use WPF UI thread if there is one
            var messageLoopDispatcher = Application.Current?.Dispatcher;
            if (messageLoopDispatcher == null)
            {
                var readyEvent = new ManualResetEvent(false);
                var messageLoopThread = new Thread(() =>
                {
                    messageLoopDispatcher = Dispatcher.CurrentDispatcher;
                    readyEvent.Set();
                    Dispatcher.Run();
                });
                messageLoopThread.SetApartmentState(ApartmentState.STA);
                messageLoopThread.Start();
                readyEvent.WaitOne();
            }
            messageLoopDispatcher.Invoke(() =>
            {
                accessBridge.Initialize();
            });
于 2019-09-18T03:49:50.363 回答