我正在使用 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
最佳答案
Initialize()
或初始化代码通常需要在 UI 线程或消息泵线程中调用。- 在
IsJavaWindow()
中使用GetForegroundWindow()
或GetActiveWindow()
中的IntPtr
始终返回 false,但在 user32.dll 的方法中使用FindWindow()
则有效。
关于Java 应用程序窗口在 C# InterOp 中未被识别为 java 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59084039/