Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JNA和EnumWindows时出现问题_Java_Jna - Fatal编程技术网

Java 使用JNA和EnumWindows时出现问题

Java 使用JNA和EnumWindows时出现问题,java,jna,Java,Jna,我正在试验JNA,这是我尝试运行的第一个程序。我从引用中复制了它,但是,当我运行它时,他发现412个窗口。。。我很确定我现在没有打开多少窗口:)有人能给我解释一下这个程序的行为吗 import com.sun.jna.Pointer; import com.sun.jna.win32.StdCallLibrary.StdCallCallback; import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public

我正在试验JNA,这是我尝试运行的第一个程序。我从引用中复制了它,但是,当我运行它时,他发现412个窗口。。。我很确定我现在没有打开多少窗口:)有人能给我解释一下这个程序的行为吗

import com.sun.jna.Pointer;
import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

public class Main {
// Equivalent JNA mappings
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

        interface WNDENUMPROC extends StdCallCallback {
            boolean callback(Pointer hWnd, Pointer arg);
        }

        boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg);
    }

    public static void main(String[] args) {
        User32 user32 = User32.INSTANCE;

        user32.EnumWindows(new User32.WNDENUMPROC() {
            int count;
            public boolean callback(Pointer hWnd, Pointer userData) {
                System.out.println("Found window " + hWnd + ", total " + ++count);
                return true;
            }
        }, null);
    }
}

在Windows中,几乎所有东西都是一个窗口。下面是对代码的一些更改,这些更改将显示一些窗口标题/文本:

import com.sun.jna.Pointer;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

public class JNA_Main {
    // Equivalent JNA mappings
    public interface User32 extends StdCallLibrary {
        User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

        interface WNDENUMPROC extends StdCallCallback {
            boolean callback(Pointer hWnd, Pointer arg);
        }

        boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer arg);

        int GetWindowTextA(Pointer hWnd, byte[] lpString, int nMaxCount);
    }

    public static void main(String[] args) {
        final User32 user32 = User32.INSTANCE;

        user32.EnumWindows(new User32.WNDENUMPROC() {

            int count;

            public boolean callback(Pointer hWnd, Pointer userData) {
                byte[] windowText = new byte[512];
                user32.GetWindowTextA(hWnd, windowText, 512);
                String wText = Native.toString(windowText);
                wText = (wText.isEmpty()) ? "" : "; text: " + wText;
                System.out.println("Found window " + hWnd + ", total " + ++count + wText);
                return true;
            }
        }, null);
    }
}

如果有什么不清楚的地方,请询问。

是的,它是正确的。很多你不期望的东西是“窗口”,实际上是一个窗口。满是鳗鱼的气垫船,你能帮我解决我和JNA的问题吗?我已经找了几个小时的答案了,现在还在找。