2012-06-16 13 views
7
Window.getWindows(); 

Non ottiene tutte le finestre aperte, solo quelle Java. C'è un modo per ottenere tutte le finestre che il sistema operativo ha aperto. Sto creando una barra delle applicazioni Java.Ottenere titoli di Windows non Java in Java

+5

fare un programma Java che dipende dalla piattaforma? la mente è stata spazzata via. – mre

+1

Java non è un linguaggio adatto per creare app specifiche per questo tipo di sistema operativo! –

risposta

20

Non esiste alcuna soluzione che utilizzi il core Java, ma il problema può essere risolto utilizzando JNI o ​​per un tempo più semplice, JNA. Come notato nei commenti, nessuna soluzione (che io sappia) sarà indipendente dalla piattaforma.

Per esempio, questo programma demo utilizza JNA per enumerare tutte le finestre con il titolo in una piattaforma Windows, ma comprenderà anche le finestre che non sono finestre di primo livello e finestre anche che non sono visibili:

import java.util.ArrayList; 
import java.util.List; 

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

public class EnumAllWindowNames { 
    static 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 userData); 
     int GetWindowTextA(Pointer hWnd, byte[] lpString, int nMaxCount); 
     Pointer GetWindow(Pointer hWnd, int uCmd); 
    } 

    public static List<String> getAllWindowNames() { 
     final List<String> windowNames = new ArrayList<String>(); 
     final User32 user32 = User32.INSTANCE; 
     user32 .EnumWindows(new User32.WNDENUMPROC() { 

     @Override 
     public boolean callback(Pointer hWnd, Pointer arg) { 
      byte[] windowText = new byte[512]; 
      user32.GetWindowTextA(hWnd, windowText, 512); 
      String wText = Native.toString(windowText).trim(); 
      if (!wText.isEmpty()) { 
       windowNames.add(wText); 
      } 
      return true; 
     } 
     }, null); 

     return windowNames; 
    } 

    public static void main(String[] args) { 
     List<String> winNameList = getAllWindowNames(); 
     for (String winName : winNameList) { 
     System.out.println(winName); 
     } 
    } 


} 
Problemi correlati