Есть ли какой-нибудь возможный способ получить информацию о моем адаптере графической карты, используя Java API?
Я знаю, что DirectX может легко это сделать, однако мне просто интересно, может ли Java сделать это …?
Как на картинке ниже. DirectX обнаруживает адаптер графического процессора, интегрированный в мое оборудование, и список поддерживаемых разрешений.
Моя проблема в том, есть ли API, который Java будет делать такого рода вещи?
Мне действительно интересно, может ли Java получить информацию относительно видеокарты.
Спасибо.
Как сказал @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 информация —
Название карты: семейство Intel® R Graphics
Текущий режим: 1366 x 768 (32 бита) (60 Гц)
Есть несколько способов сделать это в Java. Но все они в конечном итоге используют DirectX / OpenGL / C ++ / WinAPI / независимо от того, как их серверная часть.
Вам понадобятся привязки Java для любого из этих API. Или вы можете написать свой код на C / C ++ и использовать его через JNI.