【发布时间】:2015-09-20 02:22:16
【问题描述】:
我有一个示例 Java 应用程序,我在下载 javaaccessablity-2.0.2 时得到了它,它使用了 Java Accessibility(通过 Java Access Bridge WindowsAccessBridge-32.dll)。尽管它成功调用了getAccessibleContextFromHWND,但它返回了false。
请注意,我通过 Inspect 工具验证了 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);
}
}
我已阅读a similar post,但它并没有解决我的问题。
【问题讨论】:
-
FindWindow 返回的值是什么?你意识到 FindWindow 的返回值是一个窗口 handle (HWND),而不是一个指针 (IntPtr)?如果您错误地传递了 HWND,它将解释为什么 getAccessibleContextFromHWND 会返回 FALSE..
-
IntPtr 是用于指针大小的 HWND 的正确类型
-
感谢@DavidHeffernan 的澄清
-
@krrishna 我猜你没有答案,因为我们真的不知道你想做什么。如果您制作了 MCVE 并为我们提供了重现问题的明确步骤,那么这个问题可能更有吸引力。就目前而言,我认为我们必须猜测您的实际问题场景是什么。
标签: java c# winapi pinvoke java-access-bridge