如何调用和初始化Java Access Bridge API?

时间:2015-08-05 08:36:31

标签: java java-access-bridge

Java Access Bridge API documentation州:

  

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

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

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

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

1 个答案:

答案 0 :(得分:0)

JAB依赖于Windows Messaging机制来执行进程间通信。您必须设置一个线程来运行消息泵循环并在该线程中调用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();
            });