1

我在 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

4

1 回答 1

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