使用64位Java SDK和64位windows在C#中运行Java可访问性示例Java应用程序

使用64位Java SDK和64位windows在C#中运行Java可访问性示例Java应用程序,java,c#,winapi,pinvoke,java-access-bridge,Java,C#,Winapi,Pinvoke,Java Access Bridge,我有一个示例Java应用程序,是我在下载javaaccessability-2.0.2时得到的,它利用了Java可访问性(通过Java访问桥WindowsAccessBridge-32.dll)。尽管它成功地调用了getAccessibleContextFromHWND,但它返回false。 请注意,我通过Inspect tool验证了hWnd的正确值 我的windows 64位系统中安装了64位Java SDK。下面是我试过的代码。我也尝试过WindowsAccessBridge-64.dll

我有一个示例Java应用程序,是我在下载
javaaccessability-2.0.2
时得到的,它利用了Java可访问性(通过Java访问桥
WindowsAccessBridge-32.dll
)。尽管它成功地调用了
getAccessibleContextFromHWND
,但它返回
false
。 请注意,我通过Inspect tool验证了hWnd的正确值

我的windows 64位系统中安装了64位Java SDK。下面是我试过的代码。我也尝试过WindowsAccessBridge-64.dll,但它给出了相同的行为,即vmID和acParent作为零而不是非零值返回

class Program
{

    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl)]
    public extern static bool getAccessibleContextFromHWND(IntPtr hwnd, out Int32 vmID, out Int64 acParent);


    [DllImport("WindowsAccessBridge-32.dll", CallingConvention = CallingConvention.Cdecl, ThrowOnUnmappableChar = true, CharSet = CharSet.Unicode)]
    private extern static void Windows_run();

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    static void Main(string[] args)
    {
        Int32 vmID = 0;
        Int64 _acParent =0;
        Windows_run();
        IntPtr hWnd = (IntPtr)FindWindow("SunAwtFrame","Standalone SwingApp");
        bool retVal = getAccessibleContextFromHWND(hWnd, out vmID, out _acParent);

    }
}

我读过,但它并没有解决我的问题。

我让它工作了。当我们构建涉及WindowsAccessBridge DLL的项目时,这与选择正确的目标平台组合有关。我们必须尝试大量的排列来实现这一点

下面的链接中有代码,但您仍然需要加载适当的DLL才能正常工作


FindWindow返回的值能为您带来什么?您是否意识到FindWindow的返回值是一个窗口句柄(HWND),而不是指针(IntPtr)?如果您错误地传递了HWND,它将解释为什么getAccessibleContextFromHWND将返回FALSE..IntPtr是指针大小的HWND使用的正确类型感谢您的澄清@DavidHeffernan@krrishna我猜你没有答案,因为我们不知道你想做什么。如果你做了一个MCVE,并给了我们清晰的步骤来重现这个问题,那么这个问题可能会更有吸引力。就目前情况而言,我认为我们必须猜测你的实际问题是什么。