首页 > 解决方案 > Java 应用程序窗口在 C# InterOp 中未被识别为 java 窗口

问题描述

我在 C# 中使用带有互操作的 Java Access Bridge API。当尝试AccessibleWindow使用从 user32.dll 方法获得的 hwnd创建一个新GetForegroundWindow()窗口时,它不会将该窗口识别为 java 窗口,返回 null。IsJavaWindow()返回 false,但第二次调用它返回 true。我使用示例“SwingSet2”应用程序对此进行了测试。

        public void Initialize()
        {
            if(!Initialized)
            {
                accessBridge = new AccessBridge();
                var hwnd = WindowsNativeMethods.GetForegroundWindow();
                var window = accessBridge.CreateAccessibleWindow(hwnd);
                window.AccessBridge.Initialize();
                window.AccessBridge.Functions.GetAccessibleContextFromHWND(hwnd, out vmId, out mainContext);
                Initialized = true;      
            }
        }

我也在使用这个 repo 中的代码:Google Access Bridge

标签: javac#interopjava-access-bridge

解决方案


  1. Initialize()或者初始化代码一般需要在UI线程或消息泵线程中调用。
  2. 使用IntPtrfromGetForegroundWindow()GetActiveWindow()总是返回 false in IsJavaWindow(),但使用FindWindow()来自 user32.dll 的方法的作品。

推荐阅读