Java Erişilebilirlik (Java Access Bridge WindowsAccessBridge-32.dll
aracılığıyla) kullanan javaaccessablity-2.0.2
'u indirdiğimde aldığım örnek bir Java uygulamasına sahibim. getAccessibleContextFromHWND
'u başarıyla çağırsa da, false
'u döndürür. Lütfen Inspect aracıyla doğruladığım hWnd için doğru değeri aldığımı unutmayın.C# içinde JavaAccessability için örnek Java uygulamasını çalıştıran 64-bit Java SDK ve 64-bit pencereler ile
Windows 64-bit sistemimde 64 bit Java SDK yüklü var. Ve denediğim kod aşağıdadır. Ben de WindowsAccessBridge-64.dll ile denedim ama vmID ve _acParent sıfır olmayan değerler yerine sıfır olarak döndürülen aynı davranışı verir.
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);
}
}
Ben a similar post okudum ama benim sorunu çözemedi.
Eğer FindWindow tarafından döndürülen değeri için ne alıyorsun? FindWindow döndürme değeri bir pencere * tanıtıcı * (HWND), bir işaretçi (IntPtr) değil, farkında mısınız? HWND yanlış bir şekilde geçiyorsanız, getAccessibleContextFromHWND neden FALSE döndüreceğini açıklar .. –
IntPtr, HWND –
işaretçisi boyutunda kullanılacak doğru türüdür. Açıklama için teşekkürler @DavidHeffernan –