Код: Выделить всё
[DllImport(WinAccessBridgeDll, SetLastError = true, ThrowOnUnmappableChar = true, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
private extern static void Windows_run();
Код: Выделить всё
public IElement? FindWindowFromHandle(IntPtr handle)
{
if (IsJavaWindow(handle) != 1)
return null;
unsafe
{
if (GetAccessibleContextFromHWND(handle, out Int32 VmID, out IntPtr javaWindowHandle) && javaWindowHandle != IntPtr.Zero)
return new JavaElement(VmID, javaWindowHandle);
}
return null;
}
После долгой отладки мой единственный логический вывод заключается в том, что первый Когда вызывается FindWindowFromHandle(), мой класс автоматизации Java еще не инициализирован должным образом. К сожалению, Windows_run() недействителен, поэтому, похоже, нет способа убедиться, что он загрузился должным образом.
Я попробовал несколько обходных путей, которые, кажется, исправляют проблему. проблема, например добавление кнопки, которая запускает FindWindowFromHandle() вместо ее вызова непосредственно после инициализации, или открытие MessageBox непосредственно перед первым вызовом. Однако я не хочу зависеть от какого-то произвольного способа ожидания. Мне нужно убедиться, что он будет искать окна Java только после правильной загрузки. Есть ли способ сделать это?
Подробнее здесь: https://stackoverflow.com/questions/791 ... accessbrid