java怎么取得本地计算机的任务管理器的应用程序列表,不是进程的列表,我的目的是java应用程序在执行之前,先判断某一个IE窗口是否开着,如果此IE已经关闭了,应用程序列表里就没有该IE的内容,那么,这个java应用程序就不执行了。
解决方案 »
- !!~java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver
- 请问TelnetInputStream和ServletOutputStream的父类
- 关于数据传输的问题
- jtable内绑定Jtree 点右键弹出菜单时 问题 急求解
- 初学者的问题,不要笑,谢谢!
- 请问怎么调用AWT中的Graphic画一个图形
- 呵呵。剛學!問個問題
- 怎么获得两个Date的时间差,精确到毫秒?
- 如果数据库操作方法用throws抛出SQLException, 怎样有效的关闭数据库资源?
- JBuilder7生成的project怎么样才能生成那种想WINDOWS里面的EXE文件啊!
- 问题:高手请进, graphic2D setclip 剪切图形不完整
- 在字符串中找出非某单词组成的字符串正则表达式如何表示?
Process proc = Runtime.getRuntim().exec("tasklist");
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String info = reader.readLine();
while (info != null)
{
System.out.println(info);
infor = reader.readLine();
}
还有没有什么办法,我都想了2天了
只有这种办法吗?但是我不会写C语言,能不能提供一下code,
而且怎么编译成dll阿,对不起,我是菜鸟,麻烦了。
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.plaf.basic.BasicComboPopup;/*
* 前台显示界面
* 作者:宋海康
*/
public class TaskList extends JFrame {
static JTable table=null;
JScrollPane p1;
JComboBox box;
JPopupMenu rightmenu;
private TaskListCon con=new TaskListCon();
public TaskList(){
super("Java版任务管理器(黑天鹅组件)");
this.addItem();
this.pack();
this.setVisible(true);
this.setLocation(150,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws Exception {
new TaskList();
}
public void addItem(){
Container f=this.getContentPane();
table=new JTable();
table=con.showList(table);
//设置一次选择一行
table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//设置选中行的前景和背景
table.setSelectionBackground(Color.lightGray);
table.setSelectionForeground(Color.WHITE);
//************************右键菜单事件 *********************************************
box=new JComboBox();
box.addItem("根据名称关闭进程");
box.addItem("根据PID关闭进程");
box.addItem("关闭进程树");
box.addItem("刷新进程列表");
//右键菜单控件
rightmenu=new BasicComboPopup(box);
rightmenu.setPopupSize(130, 100);//调整弹出菜单的大小
//监听右键菜单的鼠标事件
box.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
rightKey();
}
}); //添加右键菜单到table上
table.setComponentPopupMenu(rightmenu);
p1=new JScrollPane(table);//没有JScrollPane的话,标题不会出现
f.setLayout(new BorderLayout());
f.add(p1,BorderLayout.CENTER);
}
// Table的右键事件
public void rightKey(){
int r= table.getSelectedRow();
if(box.getSelectedIndex()==3){//刷新
con.showList(table);
rightmenu.hide();//隐藏右键
}else if(r==-1)
{
//new Audio().soundPlay("/sound/warning.wav");
JOptionPane.showMessageDialog(null, "对不起!你还没有选中一行!" ,
"系统提示",JOptionPane.WARNING_MESSAGE);
}else{
//获得选中单元行的值
Object name=table.getModel().getValueAt(r,1);
Object pid= table.getModel().getValueAt(r,2);
// 处理加为好友请求
if(box.getSelectedIndex()==0)
{//强制结束指定的进程名子
con.javaDos("taskkill /F /im "+name,table);
rightmenu.hide();//隐藏右键
}
if(box.getSelectedIndex()==1)
{//强制结束指定PID的进程
con.javaDos("taskkill /F /pid "+pid,table);
rightmenu.hide();//隐藏右键
}
if(box.getSelectedIndex()==2)
{//强制结束指定PID的进程树
con.javaDos("taskkill /F /T /pid "+pid,table);
rightmenu.hide();//隐藏右键
}
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
/*
* 后台控制程序
* 作者:宋海康
*/
public class TaskListCon {
//核心程序,用命令获得进程列表
public DefaultTableModel tasklist(){
String [][] result=new String[60][10];//创建存放进程的数组
String[] title=null;
Process pro = null;//命令返回的结果
try {
pro=Runtime.getRuntime().exec("cmd /c tasklist /FO csv");
InputStreamReader ipsr=new InputStreamReader(pro.getInputStream());//把得到的输入流转换为字节流
BufferedReader br=new BufferedReader(ipsr);// 把字节流转换为字符流
String res=null;
int x=0;
while((res=br.readLine())!=null){
String[] value=res.replace("\",\"", ";").replace("\"", "").split(";");
if(x==0){
title=new String[value.length+1];
}
for (int i = 0; i < value.length+1; i++) {
//如果是标题行
if(x==0){
if(i==0){
title[i]="编号";
}else{
title[i]=value[i-1];
}
}
else if(i==0){//显示编号
result[x-1][i]=x+"";
}else{
result[x-1][i]=value[i-1];
}
}
//如果不是正规的进程格式则不显示
if(value.length<10&&value.length>1){
x++;
}
//规定最多只显示60条进程记录
if(x==60){
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
DefaultTableModel modle=new DefaultTableModel(result,title){
public boolean isCellEditable(int row, int column) {return false;}
};
return modle;
}
//执行命令
public void javaDos(String cmd,JTable table){
try {
Runtime.getRuntime().exec("cmd /c "+cmd);
Thread thread=new Thread();
thread.sleep(200);//休眠一下再刷新
showList(table);
} catch (Exception e) {
e.printStackTrace();
}
}
// 对table进行赋值
public JTable showList(JTable table){
//设置表格的标题行
DefaultTableModel modle=tasklist();
table.setModel(modle);
//设置table的列宽
TableColumn Column1 = table.getColumnModel().getColumn(0);
Column1.setPreferredWidth(30);
TableColumn Column2 = table.getColumnModel().getColumn(1);
Column2.setPreferredWidth(150);
TableColumn Column6 = table.getColumnModel().getColumn(5);
Column6.setPreferredWidth(80);
return table;
}
}