2015-07-02 30 views
8

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.

+0

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 .. –

+0

IntPtr, HWND –

+0

işaretçisi boyutunda kullanılacak doğru türüdür. Açıklama için teşekkürler @DavidHeffernan –

cevap

2

Çalıştım. WindowsAccessBridge dll'lerini içeren projeleri oluştururken doğru Hedef Platform kombinasyonunu seçmekle ilgilidir. Bunun işe yaraması için çok fazla permütasyon denemeliyiz.

Aşağıdaki bağlantı kodu vardır, ancak yine de çalışmasını sağlamak için uygun donanımları yüklemeniz gerekir.

https://github.com/jdog3/JavaAccessBridge.Net-Sample