拉兄弟一把——————关闭进程的问题

wangkun007 2002-07-03 03:31:03
我在程序中想关闭‘任务管理器’中的另外一个进程,怎么实现!!!!
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yansea 2002-07-03
  • 打赏
  • 举报
回复
找了一个枚举进程、线程的例子,你看看;
unit MainForm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
TlHelp32, StdCtrls, ComCtrls, ExtCtrls;

type
TfrmMain = class(TForm)
pnlInfo: TPanel;
lvThreads: TListView;
Splitter1: TSplitter;
pnlButtons: TPanel;
btnRefresh: TButton;
btnClose: TButton;
lvProcs: TListView;
procedure btnRefreshClick(Sender: TObject);
procedure lvProcsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure btnCloseClick(Sender: TObject);
private
procedure FillThreadList(ProcID:Integer);
public
end;

var
frmMain: TfrmMain;

implementation

{$R *.DFM}
procedure TfrmMain.FillThreadList(ProcID: Integer);
var
hSnapshot:THandle;
ThreadEntry:TThreadEntry32;0D
RetVal:Bool;
LvItem:TListItem;
begin
lvThreads.Items.Clear;
0A hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS or TH32CS_SNAPTHREAD,GetCurrentProcessId);
ThreadEntry.dwSize := Sizeof(ThreadEntry);
RetVal := Thread32First(hSnapshot,ThreadEntry);
while RetVal do
begin
if ThreadEntry.th32OwnerProcessID = Integer(ProcID) then
begin
LvItem := lvThreads.Items.Add;
LvItem.Data := Pointer((ThreadEntry.th32ThreadID));
LvItem.Caption := IntToStr(ThreadEntry.th32ThreadID);
end;
RetVal := Thread32Next(hSnapshot,ThreadEntry);
end;
CloseHandle(hSnapshot);
end;

procedure TfrmMain.btnRefreshClick(Sender: TObject);
var
hSnapshot:THandle;
ProcEntry:TProcessEntry32;0D
RetVal:Bool;
LvItem:TListItem;
TvNode:TTreeNode;
ThreadList:TList;
begin
lvProcs.Items.Clear;
hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS or TH32CS_SNAPTHREAD,GetCurrentProcessId);
ProcEntry.dwSize := Sizeof(ProcEntry);
RetVal := Process32First(hSnapshot,ProcEntry);
while RetVal do
begin
LvItem :=lvProcs.Items.Add;
LvItem.Caption :=(ProcEntry.szExeFile);
LvItem.SubItems.Add(IntToStr(ProcEntry.th32ProcessID));0D
LvItem.SubItems.Add(IntToStr(ProcEntry.th32ParentProcessID));
LvItem.SubItems.Add(IntToStr(ProcEntry.cntThreads));
0A LvItem.Data:=(Pointer(ProcEntry.th32ProcessID));
RetVal := Process32Next(hSnapshot,ProcEntry);
end;
CloseHandle(hSnapShot);
0Aend;

procedure TfrmMain.lvProcsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if Selected then
begin
FillThreadList(Integer(Item.Data));
end;
end;

procedure TfrmMain.btnCloseClick(Sender: TObject);
begin
Close;
end;
end.
yansea 2002-07-03
  • 打赏
  • 举报
回复
找了一个枚举进程、线程的例子,你看看;
unit MainForm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
TlHelp32, StdCtrls, ComCtrls, ExtCtrls;

type
TfrmMain = class(TForm)
pnlInfo: TPanel;
lvThreads: TListView;
Splitter1: TSplitter;
pnlButtons: TPanel;
btnRefresh: TButton;
btnClose: TButton;
lvProcs: TListView;
procedure btnRefreshClick(Sender: TObject);
procedure lvProcsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure btnCloseClick(Sender: TObject);
private
procedure FillThreadList(ProcID:Integer);
public
end;

var
frmMain: TfrmMain;

implementation

{$R *.DFM}
procedure TfrmMain.FillThreadList(ProcID: Integer);
var
hSnapshot:THandle;
ThreadEntry:TThreadEntry32;0D
RetVal:Bool;
LvItem:TListItem;
begin
lvThreads.Items.Clear;
0A hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS or TH32CS_SNAPTHREAD,GetCurrentProcessId);
ThreadEntry.dwSize := Sizeof(ThreadEntry);
RetVal := Thread32First(hSnapshot,ThreadEntry);
while RetVal do
begin
if ThreadEntry.th32OwnerProcessID = Integer(ProcID) then
begin
LvItem := lvThreads.Items.Add;
LvItem.Data := Pointer((ThreadEntry.th32ThreadID));
LvItem.Caption := IntToStr(ThreadEntry.th32ThreadID);
end;
RetVal := Thread32Next(hSnapshot,ThreadEntry);
end;
CloseHandle(hSnapshot);
end;

procedure TfrmMain.btnRefreshClick(Sender: TObject);
var
hSnapshot:THandle;
ProcEntry:TProcessEntry32;0D
RetVal:Bool;
LvItem:TListItem;
TvNode:TTreeNode;
ThreadList:TList;
begin
lvProcs.Items.Clear;
hSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS or TH32CS_SNAPTHREAD,GetCurrentProcessId);
ProcEntry.dwSize := Sizeof(ProcEntry);
RetVal := Process32First(hSnapshot,ProcEntry);
while RetVal do
begin
LvItem :=lvProcs.Items.Add;
LvItem.Caption :=(ProcEntry.szExeFile);
LvItem.SubItems.Add(IntToStr(ProcEntry.th32ProcessID));0D
LvItem.SubItems.Add(IntToStr(ProcEntry.th32ParentProcessID));
LvItem.SubItems.Add(IntToStr(ProcEntry.cntThreads));
0A LvItem.Data:=(Pointer(ProcEntry.th32ProcessID));
RetVal := Process32Next(hSnapshot,ProcEntry);
end;
CloseHandle(hSnapShot);
0Aend;

procedure TfrmMain.lvProcsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
if Selected then
begin
FillThreadList(Integer(Item.Data));
end;
end;

procedure TfrmMain.btnCloseClick(Sender: TObject);
begin
Close;
end;
end.
wangkun007 2002-07-03
  • 打赏
  • 举报
回复
大虾们:怎么得到进程的ID !!!
请不要笑我!!!!!!!!谢谢!!!!
wangkun007 2002-07-03
  • 打赏
  • 举报
回复
yansea(思宏) 谢谢了
能不能多给点代码!我有些看不明白!!!!谢谢!!!
zsy_good 2002-07-03
  • 打赏
  • 举报
回复
枚举所有进程。得到那个在列表框中选中的进程ID
TerminateProcess
yansea 2002-07-03
  • 打赏
  • 举报
回复
找到该进程的id;
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
zfk51069 2002-07-03
  • 打赏
  • 举报
回复
我不知道,但我可以帮你up,我也想知道答案

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧