2010-12-18 64 views
4

我正在试验JNA,这是我尝试运行的第一个程序。我从参考文献中复制了它,但是,当我运行它时,他发现了412个窗口...并且我确定我没有那么多窗口现在打开:)请问某人可以向我解释程序的行为?问题使用JNA和EnumWindows

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); 
    } 
} 
+0

是的,它是正确的。许多你不期望的事情是“Windows”实际上是一个窗口。 – 2010-12-18 16:29:10

回答

7

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

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); 
    } 
} 

请问有没有什么不清楚的地方。

+0

气垫船满载鳗鱼,你能帮我解答我和JNA的问题吗?我一直在寻找几个小时的答案,仍然在寻找。 http://stackoverflow.com/questions/29825826/get-selected-files-in-windows-explorer-in-java-jna – amone 2015-04-23 14:36:23