Как получить информацию о графической карте на Java?

Есть ли какой-либо возможный способ получить информацию о моем адаптере графической карты с использованием Java API?

Я знаю, что DirectX может легко это сделать, однако мне просто интересно, может ли Java это сделать...?

Как показано ниже. DirectX обнаруживает адаптер GPU, интегрированный в мое оборудование, и список его поддерживающих разрешений.

Моя проблема в том, есть ли API, что Java будет делать такие вещи? Мне действительно интересно, сможет ли Java получить информацию о видеокарте.

Спасибо.

2 ответа

Как сказал @Sergey K., в его ответе есть несколько способов сделать это. Один из них использует инструмент dxdiag (очевидно, он будет работать только в Windows), в частности вариант dxdiag /t, который перенаправляет вывод в данный файл. Затем вы можете обработать этот файл, чтобы получить необходимую информацию:

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

Сгенерированный файл будет выглядеть следующим образом:

И результат будет выглядеть так:

- Выполнение команды dxdiag - - Печать. /foo.txt info - Название карты: семейство продуктов Intel (R) HD Текущий режим: 1366 x 768 (32 бит) (60 Гц)


Существует несколько способов сделать это в Java. Но все они в конечном итоге используют DirectX/OpenGL/С++/WinAPI/как их back-end.

Вам понадобятся привязки Java для любого из этих API. Или вы можете написать свой код на C/С++ и использовать его через JNI.

licensed under cc by-sa 3.0 with attribution.