Java 应用程序窗口在 C# InterOp 中未被识别为 java 窗口

标签 java c# interop java-access-bridge

我正在使用 Java Access Bridge API 和 C# 中的互操作。当尝试使用从 user32.dll 方法 GetForegroundWindow() 获取的 hwnd 创建新的 AccessibleWindow 时,它不会将该窗口识别为 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;      
            }
        }

我还使用此存储库中的代码:Google Access Bridge

最佳答案

  1. Initialize() 或初始化代码通常需要在 UI 线程或消息泵线程中调用。
  2. IsJavaWindow() 中使用 GetForegroundWindow()GetActiveWindow() 中的 IntPtr 始终返回 false,但在 user32.dll 的方法中使用 FindWindow() 则有效。

关于Java 应用程序窗口在 C# InterOp 中未被识别为 java 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084039/

相关文章:

java - 防止 JavaFX 线程死于 JFXPanel Swing 互操作?

java - 图像无法识别

c# - 如何正确格式化字符串?

c# - ViewBag 不保存状态

c# - 通过 C# 控制台应用程序运行批处理文件。命令被忽略

Clojure、Java Interop 和代理方法

java - CDI @Instance 收集@Any,但访问限定符(特别是@Named)

java - 如何确保 Spring Security 安全资源服务器仅接受来自自己应用程序的 JWT token

java - 使用 selenium 库在本地替换网站上的图像

ruby - 为什么 to_java 方法将 Java 中的整数(可能是)转换为 Long?