※ 주의: 본 기사의 모든 내용은 윈도우 XP 프로페셔널에서만 동작한다. 윈도우 XP 홈에디션에는 시스템 정보를 얻어내는 프로그램(systeminfo.exe)이 지원되지 않는다.무엇을 만들 것인가요?
[그림 1]
[그림 2]
public void run() { Runtime runtime = Runtime.getRuntime(); Process process = null; try { // this.command = "systeminfo.exe"; process = runtime.exec(this.command); // 외부 프로그램 실행 } catch (IOException ioe) { ioe.printStackTrace(); } // 표준 출력 InputStream standardOutput = process.getInputStream(); // 표준 에러 InputStream standardError = process.getErrorStream(); InputStreamReader ir = new InputStreamReader(standardOutput); InputStreamReader ow = new InputStreamReader(standardError); BufferedReader outReader = new BufferedReader(ir); BufferedReader errorReader = new BufferedReader(ow); StringBuffer stdout = new StringBuffer(); StringBuffer stderr = new StringBuffer(); String line = null; try { // 루프를 돌면서 퓨준 출력과 표준 에러를 계속 받아낸다 while ( (line = outReader.readLine()) != null) { stdout.append(line).append("\n"); } while ( (line = errorReader.readLine()) != null) { stderr.append(line).append("\n"); } standardOutput.close(); standardError.close(); } catch (IOException ioe) { ioe.printStackTrace(); } result.setStdout(stdout.toString()); // 이 결과를 나중에 사용한다 result.setStderr(stderr.toString()); }위의 코드 마지막 부분에 나중에 사용할 결과를 지정하는 부분이 있다. 그 결과를 이용해서 원하는 정보만 가려내는 코드는 다음과 같다.
String result = pRunner.result.getStdout(); StringTokenizer st = new StringTokenizer(result, "\n"); while (st.hasMoreElements()) { String line = (String)st.nextElement(); if (line.startsWith("호스트 이름")) { addSysInfo(line); } if (line.startsWith("OS 이름")) { addSysInfo(line); } if (line.startsWith("등록된 소유자")) { addSysInfo(line); } if (line.startsWith("Product ID")) { addSysInfo(line); } if (line.startsWith("System Up Time")) { addSysInfo(line); } }원하는 정보를 모두 얻었다면 이제 GUI로 아름답게 보여주는 일만 남았다. 이 부분에서는 여러 분들이 직접 원하는 형태대로 만들어보기 바란다. 물론 완전한 소스 코드는 별도의 파일(systeminfo.zip)에서 제공할 것이다. 간단한 클래스 3개로 구성되므로 무리 없이 분석 가능하며 압축 파일을 풀면 run.bat 파일이 있다. 이 파일을 실행하면 간단히 실행할 수 있을 것이다.
이전 글 : 하이버네이트(Hibernate) 입문
다음 글 : 온라인 배포 행위와 관련한 잡다한 생각들
최신 콘텐츠