zoukankan      html  css  js  c++  java
  • Java获取系统安装软件列表

     
    /**
     * @author  <a href="mailto:foohsinglong@gmail.com">kevin.long</a>
     * @description Java获取系统软件安装列表,代码核心来自网上,主要通过Runtime实现,
     *  用JNI也行,解决乱码问题
     */
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.nio.charset.Charset;
    
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextPane;
     
    public class SystemSoftware {  
        private JFrame f = new JFrame("本系统已经安装的软件列表");
        private JTextPane textPane = new JTextPane();
        private MyTable myTable=new MyTable();
        public static Charset charset = Charset.forName("GBK");
        public SystemSoftware() {
            f.setLocation(300, 200);
            f.setSize(800,500);
            JScrollPane jScrollPane = new JScrollPane(myTable.getTable());
            f.add(jScrollPane);
            f.setVisible(true);
            f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
    
            try {
                check();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private void check() throws Exception {
            textPane.setText("您已经安装的软件:");
            Runtime runtime = Runtime.getRuntime();
            Process process = null;
            process = runtime
                    .exec("cmd /c reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\");
            BufferedReader in = new BufferedReader(new InputStreamReader(process
                    .getInputStream(),"GBK"));
            String string = null;
            while ((string = in.readLine()) != null) {
                process = runtime.exec("cmd /c reg query " + string
                        + " /v DisplayName");
                BufferedReader name = new BufferedReader(new InputStreamReader(
                        process.getInputStream(),"GBK"));
                String[] message = queryValue(string);
                if(message!=null) myTable.addRow(message);
                f.repaint();
            }
            in.close();
            process.destroy();
    
        }
    
        //具体查询每一个软件的详细信息
        private String[] queryValue(String string) throws IOException {
            String nameString = "";
            String versionString = "";
            
            String publisherString="";
            String uninstallPathString = "";
            
            Runtime runtime = Runtime.getRuntime();
            Process process = null;
            BufferedReader br = null;
            
            process = runtime.exec("cmd /c reg query " + string + " /v DisplayName");
            br = new BufferedReader(new InputStreamReader(process
                    .getInputStream(),"GBK"));
            br.readLine();br.readLine();//去掉前两行无用信息
            if((nameString=br.readLine())!=null){
                nameString=nameString.replaceAll("DisplayName    REG_SZ    ", "");    //去掉无用信息
            }
            
    
            process = runtime.exec("cmd /c reg query " + string + " /v DisplayVersion");
            br = new BufferedReader(new InputStreamReader(process
                    .getInputStream(),"GBK"));
            br.readLine();br.readLine();//去掉前两行无用信息
            if((versionString=br.readLine())!=null){
                versionString=versionString.replaceAll("DisplayVersion    REG_SZ    ", "");    //去掉无用信息
            }
            
            process = runtime.exec("cmd /c reg query " + string + " /v Publisher");
            br = new BufferedReader(new InputStreamReader(process
                    .getInputStream(),"GBK"));
            br.readLine();br.readLine();//去掉前两行无用信息
            if((publisherString=br.readLine())!=null){
                publisherString =publisherString.replaceAll("Publisher    REG_SZ    ", "");    //去掉无用信息
            }
            
            process = runtime.exec("cmd /c reg query " + string + " /v UninstallString");
            br = new BufferedReader(new InputStreamReader(process
                    .getInputStream(),"GBK"));
            br.readLine();br.readLine();//去掉前两行无用信息
            if((uninstallPathString=br.readLine())!=null){
                uninstallPathString=uninstallPathString.replaceAll("UninstallString    REG_SZ    ", "");    //去掉无用信息
            }
            
            String[] resultString=new String[4];
            resultString[0]= nameString ;//== null ? null : new String(nameString.getBytes(),"GB-2312");
            resultString[1]= versionString ;//== null ? null : new String(versionString.getBytes(),"GB-2312");
            resultString[2]= publisherString ;//== null ? null : new String(publisherString.getBytes(),"GB-2312");
            resultString[3]= uninstallPathString ;//== null ? null : new String(uninstallPathString.getBytes(),"GB-2312");
            if(resultString[0]==null) resultString=null;    //没有名字的不显示
            return resultString;
        }
        
        //列表
        private class MyTable{
            private JTable jTable;
            private Object[][] data=new Object[100][4];
            private Object[] colNames= { "软件名称","版本号","出版商","卸载路径"};
            private int p=-1;
            
            public MyTable(){
                
            }
            
            public void addRow(Object[] data){
                p++;
                if(p>=100) return ;
                this.data[p]=data;
            }
            
            
            public JTable getTable(){
                jTable=new JTable(data,colNames);
                return jTable;
            }
            
        }
        
        public static void main(String[] args) {
            new SystemSoftware();
        }
    }  
  • 相关阅读:
    2. 商城项目完整购物链路 lq
    如何看源码? lq
    事务的了解 lq
    1. 商城业务架构分析 lq
    并发的基础知识 lq
    mysql 索引 lq
    mysqlinnodb了解 lq
    IE6.0、IE7.0 与FireFox CSS兼容的解决方法
    CSS:html/css教程:背景图片的定位问题详解
    IE6 BUG
  • 原文地址:https://www.cnblogs.com/tomcattd/p/3519609.html
Copyright © 2011-2022 走看看