Please Enable JavaScript!
Gon[ Enable JavaScript ]

윈도우 OS 에서 돌아가고 있는 프로세스명을 자바로 넘겨받는 방법

자바(JAVA)
반응형

2가지로 나눌수있는데 Runtime.getRuntime().exec() 이용해서 VB Script를 이용하던지

프로세스 정보를 출력하는 OS 에서 제공하는 tasklist.exe 유틸을 이용한다

 

원도우에서 돌아가는 프로세스 목록을 자바에서는 알수가 없다.

그래서 OS 에서 제공하는 유틸을 실행시켜 그 정보를 리턴받아 쓰면된다.

그 이름이 tasklist.exe 이다.  보통 윈도우 OS System32 에 포함되어있기

때문에 따로 받을 필요가 없지만 만약 존재하지 않을경우 다음의 주소에서

받으면 된다.

http://www.computerhope.com/download/winxp.htm



tasklist.exe 를 실행한 화면이다. 현재 실행중인 프로세스에 대한 정보들을 볼수있다

첫번쨰 소스는tasklist.exe 를 이용해서 현재 윈도우에 실행중인 프로세스 정보를 알아오는것이다

Runtime.getRuntiom().exec 를 사용해서 유틸을 실행시킨후 그 프로세스와 연결한

통로를 통해 위의 그림에서 처럼 표현된 정보들을 스트림으로 받게 된다.

받은 스트림정보를 해석해서 적절하게 이용하면된다.

그 내용에 대한 소스이다. javax.swing.JOptionPane 를 사용해서 결과값을 GUI로 표현 했다


import
java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

 

public class WindowsUtils {

    public static List listRunningProcesses(){

        List processes = new ArrayList();

        try{

            String line;

            Process p = Runtime.getRuntime().exec("tasklist.exe /nh");

            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

            while((line = input.readLine()) != null){

                if (!line.trim().equals("")){

                    // keep only the proecess name

                    processes.add(line.substring(0, line.indexOf(" ")));

                }

            }

        }catch (Exception e){

            e.printStackTrace();

        }

        return processes;

    }

 

    public static void main(String[] args){

        List processes = listRunningProcesses();

        String result = "";

        // display the result

        Iterator it = processes.iterator();

        int i = 0;

        while (it.hasNext()){

            result += it.next() + ",";

            i++;

            if (i == 10){

                result += "\n";

                i = 0;

            }

        }

        msgBox("Running processes : " + result);

    }

 

    public static void msgBox(String msg){

        javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)null,

                msg, "WindowsUtils", javax.swing.JOptionPane.DEFAULT_OPTION);

    }

}

 실행 화면



두번째는 VB Script 로 실행해서 값을 얻어오는 방법이다

import java.io.BufferedReader;

import java.io.File;

import java.io.FileWriter;

import java.io.InputStreamReader;

import java.util.*;

 

public class VBSUtils {

  private VBSUtils() {  }

 

  public static List<String> listRunningProcesses() {

    List<String> processList = new ArrayList<String>();

    try {

 

        File file = File.createTempFile("realhowto",".vbs");

        file.deleteOnExit();

        FileWriter fw = new java.io.FileWriter(file);

 

        String vbs = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n"

                   + "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n"

                   + "Set service = locator.ConnectServer()\n"

                   + "Set processes = service.ExecQuery _\n"

                   + " (\"select name from Win32_Process\")\n"

                   + "For Each process in processes\n"

                   + "wscript.echo process.Name \n"

                   + "Next\n"

                   + "Set WSHShell = Nothing\n";

 

        fw.write(vbs);

        fw.close();

        Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());

        BufferedReader input =

            new BufferedReader

              (new InputStreamReader(p.getInputStream()));

        String line;

        while ((line = input.readLine()) != null) {

            processList.add(line);

        }

        input.close();

    }

    catch(Exception e){

        e.printStackTrace();

    }

    return processList;

  }

 

  public static void main(String[] args){

    List<String> processes = VBSUtils.listRunningProcesses();

    String result = "";

 

    Iterator<String> it = processes.iterator();

    int i = 0;

    while (it.hasNext()) {

       result += it.next() +",";

       i++;

       if (i==10) {

           result += "\n";

           i = 0;

       }

    }

    msgBox("Running processes : " + result);

  }

 

  public static void msgBox(String msg) {

    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)

       null, msg, "VBSUtils", javax.swing.JOptionPane.DEFAULT_OPTION);

  }

}

 

실행화면이다 위와 동일하다.



반응형
Posted by 녹두장군1
,