2013-08-22 12 views
6

Czy istnieje sposób na pobranie informacji o karcie graficznej za pomocą interfejsu Java API?Jak odzyskać informacje o karcie graficznej w Javie?

Wiem, że DirectX może z łatwością to zrobić, ale zastanawiam się, czy Java może to zrobić ...?

Podobnie jak zdjęcie poniżej .. DirectX dowiaduje się, że adapter GPU jest zintegrowany z moim sprzętem i lista jego rozdzielczości pomocniczych.

Mój problem polega na tym, czy Java ma takie rzeczy? Naprawdę zastanawiam się, czy Java jest w stanie uzyskać informacje dotyczące karty graficznej.

enter image description here

Dziękuję.

Odpowiedz

8

Jako że @Sergey K. powiedział w swojej odpowiedzi, istnieje kilka sposobów, aby to zrobić. Jednym z nich jest użycie narzędzia dxdiag (oczywiście działa ono tylko w systemie Windows), w szczególności w wersji dxdiag /t, która przekieruje dane wyjściowe do danego pliku. Następnie można przetwarzać ten plik, aby uzyskać wymaganą informację:

public static void main(String[] args) {   
    try { 

     String filePath = "./foo.txt"; 
     // Use "dxdiag /t" variant to redirect output to a given file 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c","dxdiag","/t",filePath); 
     System.out.println("-- Executing dxdiag command --"); 
     Process p = pb.start(); 
     p.waitFor(); 

     BufferedReader br = new BufferedReader(new FileReader(filePath)); 
     String line; 
     System.out.println(String.format("-- Printing %1$1s info --",filePath)); 
     while((line = br.readLine()) != null){ 
      if(line.trim().startsWith("Card name:") || line.trim().startsWith("Current Mode:")){ 
       System.out.println(line.trim()); 
      } 
     } 
    } catch (IOException | InterruptedException ex) { 
     ex.printStackTrace(); 
    } 

} 

Wygenerowany plik będzie wyglądać następująco:

enter image description here

i wyjście będzie wyglądać następująco:

- Wykonanie Komenda dxdiag -
- Drukowanie ./foo.txt info -
Nazwa karty: Intel (R) HD G raphics Rodzina
Tryb aktualny: 1366 x 768 (32 bity) (60 Hz)

3

Istnieje kilka sposobów, aby to zrobić w Javie. Ale wszystkie z nich używają DirectX/OpenGL/C++/WinAPI/cokolwiek jako back-end.

Będziesz potrzebować wiązań Java dla każdego z tych interfejsów API. Lub możesz napisać swój kod w C/C++ i używać go przez JNI.

Powiązane problemy