2010-12-18 15 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」は実際にはウィンドウです。 –

答えて

7

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

不明な点がある場合は質問してください。

+0

ホバークラフトEelsの完全な、JNAの私の問題について私を助けてくれますか?私は何時間も答えを探していましたが、まだ見ています。 http://stackoverflow.com/questions/29825826/get-selected-files-in-windows-explorer-in-java-jna – amone

関連する問題