java版任务管理器_怎么用Java编写任务管理器

展开全部

445cf427eb1623279e2392937201b57a.png

需要添加包:jna-4.5.1.jar, jna-platform-4.5.1.jarimport java.awt.*;

import java.awt.event.*;

import java.util.Vector;

import javax.swing.*;

import javax.swing.event.*;

import javax.swing.table.*;

import com.sun.jna.platform.win32.*;

import com.sun.jna.platform.win32.WinDef.DWORD;

import com.sun.jna.platform.win32.WinNT.HANDLE;

class MyTableModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;

private Vector myData;

private int columnCount;

public MyTableModel(Vector myData, int columnCount) {

e68a843231313335323631343130323136353331333365633933

this.myData = myData;

this.columnCount = columnCount;

}

@Override

public int getRowCount() {

return myData.size();

}

@Override

public int getColumnCount() {

return this.columnCount;

}

@Override

public Object getValueAt(int rowIndex, int columnIndex) {

try {

String[] info = (String[]) myData.get(rowIndex);

return info[columnIndex];

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public void clear() {

myData.clear();

}

public void addRow(String[] row) {

myData.add(row);

}

}

public class App extends JFrame {

private static final long serialVersionUID = 1L;

private MyTableModel processTableModel;

private JTable processTable;

private MyTableModel moduleTableModel;

private JTable moduleTable;

private JLabel lblStatus;

public App() {

this.setTitle("进程管理器");

this.setSize(600, 600);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLayout(new BorderLayout());

JToolBar toolbar = new JToolBar();

JButton btnRefresh = new JButton("刷新");

btnRefresh.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

reloadProcessList();

}

});

toolbar.add(btnRefresh);

JButton btnTerminate = new JButton("结束进程");

btnTerminate.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

int rowIndex = processTable.getSelectedRow();

if(rowIndex == -1) {

JOptionPane.showMessageDialog(App.this, "请选择需要结束的进程。");

return;

}

String value = (String)processTable.getValueAt(rowIndex, 0);

boolean result = TerminateProcess(Integer.parseInt(value));

if(result) {

reloadProcessList();

btnRefresh.doClick();

JOptionPane.showMessageDialog(App.this, "进程[" + value + "]已结束。");

} else {

JOptionPane.showMessageDialog(App.this, "无法结束进程[" + value + "]。");

}

}

});

toolbar.add(btnTerminate);

this.add(toolbar, BorderLayout.NORTH);

JPanel bodyPanel = new JPanel();

bodyPanel.setLayout(new GridLayout(2, 1));

JPanel processPanel = new JPanel();

processPanel.setLayout(new BorderLayout());

processPanel.add(new JLabel("进程:"), BorderLayout.NORTH);

processTableModel = new MyTableModel(new Vector(), 2);

TableColumnModel columnModel = new DefaultTableColumnModel();

TableColumn column = new TableColumn(0, 50);

column.setHeaderValue("进程ID");

columnModel.addColumn(column);

column = new TableColumn(1, 200);

column.setHeaderValue("进程名称");

columnModel.addColumn(column);

this.processTable = new JTable(processTableModel, columnModel);

processTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

processTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

@Override

public void valueChanged(ListSelectionEvent e) {

if(e.getValueIsAdjusting()) {

String value = (String)processTable.getValueAt(e.getFirstIndex(), 0);

DWORD dwPID = new DWORD(Integer.parseInt(value));

reloadModuleList(dwPID);

}

}

});

processPanel.add(new JScrollPane(processTable), BorderLayout.CENTER);

bodyPanel.add(processPanel);

JPanel modulePanel = new JPanel();

modulePanel.setLayout(new BorderLayout());

modulePanel.add(new JLabel("模块:"), BorderLayout.NORTH);

moduleTableModel = new MyTableModel(new Vector(), 2);

columnModel = new DefaultTableColumnModel();

column = new TableColumn(0, 100);

column.setHeaderValue("名称");

columnModel.addColumn(column);

column = new TableColumn(1, 200);

column.setHeaderValue("路径");

columnModel.addColumn(column);

this.moduleTable = new JTable(moduleTableModel, columnModel);

modulePanel.add(new JScrollPane(moduleTable), BorderLayout.CENTER);

bodyPanel.add(modulePanel);

this.add(bodyPanel, BorderLayout.CENTER);

lblStatus = new JLabel();

this.add(lblStatus, BorderLayout.SOUTH);

reloadProcessList();

}

private void reloadProcessList() {

processTableModel.clear();

HANDLE hSnapshot = Kernel32.INSTANCE.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new DWORD(0));

Tlhelp32.PROCESSENTRY32.ByReference pe = new Tlhelp32.PROCESSENTRY32.ByReference();

boolean result = Kernel32.INSTANCE.Process32First(hSnapshot, pe);

while(result) {

String[] processInfo = {

pe.th32ProcessID.toString(),

String.valueOf(pe.szExeFile).trim()

};

processTableModel.addRow(processInfo);

result = Kernel32.INSTANCE.Process32Next(hSnapshot, pe);

}

Kernel32.INSTANCE.CloseHandle(hSnapshot);

processTable.updateUI();

moduleTableModel.clear();

moduleTable.updateUI();

lblStatus.setText("进程数量:" + processTableModel.getRowCount());

}

private void reloadModuleList(DWORD dwPID) {

moduleTableModel.clear();

lblStatus.setText("");

if(dwPID.intValue() == 0) {

lblStatus.setText("无法获取进程[System Process]的模块。");

return;

}

HANDLE hSnapshot = Kernel32.INSTANCE.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPMODULE, dwPID);

Tlhelp32.MODULEENTRY32W.ByReference me = new Tlhelp32.MODULEENTRY32W.ByReference();

boolean result = Kernel32.INSTANCE.Module32FirstW(hSnapshot, me);

if(!result) {

lblStatus.setText("无法获取进程[" + dwPID.intValue() + "]的模块。");

}

while(result) {

String[] moduleInfo = {

String.valueOf(me.szModule).trim(),

String.valueOf(me.szExePath).trim()

};

moduleTableModel.addRow(moduleInfo);

result = Kernel32.INSTANCE.Module32NextW(hSnapshot, me);

}

Kernel32.INSTANCE.CloseHandle(hSnapshot);

if(moduleTableModel.getRowCount() > 0) {

lblStatus.setText("进程[" + dwPID.intValue() + "]共有" + moduleTableModel.getRowCount() + "个模块。");

}

moduleTable.updateUI();

}

private boolean TerminateProcess(int dwPID) {

HANDLE hProcess = Kernel32.INSTANCE.OpenProcess(Kernel32.PROCESS_TERMINATE, false, dwPID);

if(hProcess == Kernel32.INVALID_HANDLE_VALUE) {

return false;

}

boolean result = Kernel32.INSTANCE.TerminateProcess(hProcess, 0);

Kernel32.INSTANCE.CloseHandle(hProcess);

return result;

}

public static void main(String[] args) {

App app = new App();

app.setVisible(true);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值