java - 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
解决方案
Initialize()
或者初始化代码一般需要在UI线程或消息泵线程中调用。- 使用
IntPtr
fromGetForegroundWindow()
或GetActiveWindow()
总是返回 false inIsJavaWindow()
,但使用FindWindow()
来自 user32.dll 的方法的作品。
推荐阅读
- r - R dplyr cross:动态指定函数 t.test 和 varTest 的参数
- flutter - 如何在 Flutter Firestore 的 where 查询中使用 OR 条件
- java - 有没有办法在 java 中使用 StdDraw 更快地绘制到屏幕上?
- visual-studio-code - 如果文件没有足够的可滚动行,则禁用滚动
- json - 如何使用 django 从后端到前端获取 json 响应对象?
- reactjs - 如何放弃对 IE 的支持,并防止 babel 转译为 ES5 以获得性能提升
- angular - Ionic/Angular:无法使用屏幕阅读器关注 HTMLElement
- amazon-s3 - 只读用户 - 列出我拥有读取权限的所有存储桶
- sql - SQL:如何找到从一列到下一列最接近匹配的索引日期?
- python - 创建一个字典,键是两个单独的输入