Comment obtenir la liste de toutes les poignées de fenêtre en Java (à l'Aide de la "JNA")?

Je suis novice pour la JNA. J'essaye de faire des poignées pour tous les windows, y compris minimisé. J'ai besoin de HWND de toutes les fenêtres. Je suis allé thro la question Windows: comment obtenir une liste de toutes les fenêtres visibles? qui m'a aidé à obtenir la liste à windows, mais il a hWnd type int. Je ne peux pas l'utiliser avec com.sun.jna.platform.win32.User32 fonctions qui demande hWnd de type com.sun.jna.platform.win32.WinDef.HWND. Donc, Est-il possible d'obtenir toutes les poignées de fenêtre de type com.sun.jna.platform.win32.WinDef.HWND plutôt que int pointeur? Enfin, pourquoi la différence int et HWND? Comment est-il accepter? Je suis un peu confus. Merci.

J'ai le code suivant(sous la direction de Hovercreft réponse):

    import com.sun.jna.Native;
    import com.sun.jna.Pointer;
    import com.sun.jna.platform.win32.User32;
    import com.sun.jna.platform.win32.WinDef.HWND;
    import com.sun.jna.platform.win32.WinDef.RECT;
    import com.sun.jna.platform.win32.WinUser.WNDENUMPROC;

    public class TryWithHWND {

    public static void main(String[] args) {
        final User32 user32 = User32.INSTANCE;
        user32.EnumWindows(new WNDENUMPROC() {
            int count = 0;
            public boolean callback(HWND hWnd, Pointer arg1) {
                char[] windowText = new char[512];
                user32.GetWindowText(hWnd, windowText, 512);
                String wText = Native.toString(windowText);
                RECT rectangle = new RECT();
                user32.GetWindowRect(hWnd, rectangle);
                //get rid of this if block if you want all windows regardless
                //of whether
                //or not they have text
                //second condition is for visible and non minimised windows
                if (wText.isEmpty() || !(User32.INSTANCE.IsWindowVisible(hWnd)
                        && rectangle.left > -32000)) {
                    return true;
                }
                System.out.println("Found window with text " + hWnd
                        + ", total " + ++count + " Text: " + wText);
                return true;
            }
        }, null);
    }
}

J'ai essayé d'utiliser uniquement(pas d'interface personnalisée) la valeur par défaut User32 classe. Il fonctionne très bien. J'ai un doute, pourquoi nous sommes définis par l'utilisateur à l'aide de l'interface au lieu de déjà existant? Une chose de plus, Il existe toujours une différence entre la signature de la méthode définie par l'utilisateur et celles qui existent déjà. Par exemple, la variable windowText est char[], alors que l'Aéroglisseur de la variable est de type byte[]. Quelqu'un peut-il m'expliquer? Merci.

Ajout d'un exemple de code utilisant WinDef.HWND à ma réponse.

OriginalL'auteur Ahamed | 2012-01-03