`
chenyu.hz
  • 浏览: 137528 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

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();
	}
}  
 
  • 大小: 75.7 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java获取电脑的硬件信息代码

    本程序通过java准确获取电脑的硬件信息,中间用到第三方包,也一并放在本压缩文件中,里面有两个DLL动态链接库问价,要把这两个文件放在系统盘的SYSTEM32文件夹下面,合理配置第三方包就可以运行这个程序来获得电脑...

    java源码包---java 源码 大量 实例

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    一键获取电脑中软件列表并导出.7z

    意见获取windows安装所有软件,并导出,包含信息有:安装文件的路径,生产厂商,版本号,软件名称。

    Java图书馆管理系统附全代码课程设计报告完整版.docx

    伴随计算机硬件的快速发展,有关信息管理的软件——数据库系统软件也在迅猛发展着。图书馆是高等院校的重要组成部门,是教师和学生获取知识的重要场所。由于图书馆主要从事大量的图书资料的储存和流通。所以一直以来...

    使用j-Interop实现java连接wmi获取windows系统信息的例子

    使用j-Interop实现java连接wmi获取windows系统信息的例子 可以直接导入MyEclipse运行,能够获取CPU,主板,显卡,声卡,网卡,以及CPU使用率,内存使用率等

    基于JAVA CS远程监控系统软件的实现(源代码+WORD论文文档论文).zip

    本系统是利用类java.awt.robot中的屏幕截取和鼠标、键盘自动控制功能,然后加上网络传输功能来完成来完成截屏和远程控制的。 2.2.2 系统运行概述 1.启动被监控端,打开指定的UDP端口号。用于读取命令。 2.被监控端...

    毕业设计 基于JAVA CS远程监控系统软件的实现(源代码+论文)

    基于JAVA C/S远程监控系统软件突破了空间的限制,使用者不用亲临,在自己的电脑面前就能轻松的实现对被监控端机器的监控。本系统采用Java网络编程和Java图形编程实现。笔者在开发过程中将网络技术与远程监控理论基础...

    java源码包4

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java源码包3

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java 维修服务系统源码.rar

    java中的维修服务系统 是一个维护可维修项目记录的项目。整个系统是在NetBeans IDE中制作的。系统有MySQL数据库作为后端支持。该系统支持该系统所需的所有功能。 关于系统 这个java修复服务系统很容易理解和操作。...

    java源码包2

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历...

    java获取系统电量所用的dll文件

    java获取系统电量所用的dll文件

    java语言操作系统课程设计模拟进程管理系统源码.zip

    java语言操作系统课程设计模拟进程管理系统源码 需求分析 实现n个进程并发运行; 实现进程创建、撤销、阻塞、唤醒; 实现进程的同步; 实现优先级调度、时间片轮转、短进程优先等调度算法; 系统在运行过程中应能...

    java流量监控软件

    java 开发的基于交换机端口的流量监控软件,以图形界面显示出来。

    Java开发技术大全(500个源代码).

    listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...

    java11安装包正式版

    JAVA JDK 11最新版可以帮助用户轻松的获取到JAVA的运行环境,让你在电脑上进行程序开发操作。JAVA JDK 11软件新增Epsilon 垃圾收集器和lambda 参数的局部变量语法,可以有效的提高开发者的生产效率和Java应用程序的...

    基于JAVA CS远程监控系统软件的实现(源代码+论文)_sicknef_JAVA执行文件_JavaRobot_javasock

    本系统采用Java网络编程和Java图形编程实现。在开发过程中将网络技术与远程监控理论基础相结合,实现了以下功能:能连续获得被监控端机器屏幕变化;实现被监控端硬盘文件的上传、下载;实现对鼠标、键盘的模拟;实现...

    基于JAVA的CS远程监控系统软件的设计与实现.doc

    基于JAVA C/S远程监控系统软件突破了空间的限制,使用者不用亲临,在自己的电脑面前就能轻松的实现对被监控端机器的监控。本系统采用Java网络编程和Java图形编程实现。笔者在开发过程中将网络技术与远程监控理论基础...

Global site tag (gtag.js) - Google Analytics