我现在想做一个类似于WINDOWS任务管理器的东西,但是我现在无法关闭一个进程,我该怎么做呢,我的代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls,Tlhelp32;type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
Edit1: TEdit;
Button2: TButton;
TreeView2: TTreeView;
procedure ProcessEnum(Sender: TObject);
procedure kill(sender:Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure Tform1.ProcessEnum(sender:Tobject);
varProcessList :Thandle;pe :TPROCESSENTRY32;node,node1 :TTreenode;processnumber :integer;procedure ModuleEnum(processid:Dword);varModuleList :Thandle;pm :TMODULEENTRY32;beginModuleList:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID);pm.dwSize:=sizeof(TMODULEENTRY32);if module32first(ModuleList,pm)then begintreeview1.Items.addchild(node,pm.szexepath);while module32next(ModuleList,pm) dotreeview1.items.addchild(node,pm.szexepath);end;closehandle(ModuleList);end; // ModuleEnum begin // ProcessEnumprocessnumber:=0;treeview1.Items.Clear;ProcessList:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);pe.dwSize:=sizeof(TPROCESSENTRY32);if process32first(ProcessList,pe) thenbeginnode:=treeview1.Items.Add(nil,pe.szexefile);ModuleEnum(pe.th32ProcessID);inc(processnumber);while process32next(ProcessList,pe) dobeginnode:=treeview1.Items.Add(nil,pe.szexefile);
node1:=treeview2.Items.Add(nil,inttostr(pe.th32ProcessID));
ModuleEnum(pe.th32ProcessID);inc(processnumber);end;end;edit1.text:='系统进程:'+inttostr(processnumber);closehandle(ProcessList);end;procedure Tform1.kill(sender:Tobject);
varProcessList :Thandle;pe :TPROCESSENTRY32;node,node1 :TTreenode;processnumber :integer;{procedure ModuleEnum(processid:Dword);varModuleList :Thandle;pm :TMODULEENTRY32;beginModuleList:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID);pm.dwSize:=sizeof(TMODULEENTRY32);if module32first(ModuleList,pm)then begintreeview1.Items.addchild(node,pm.szexepath);while module32next(ModuleList,pm) dotreeview1.items.addchild(node,pm.szexepath);end;closehandle(ModuleList);end; // ModuleEnum }begin // ProcessEnumprocessnumber:=0;//treeview1.Items.Clear;ProcessList:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);pe.dwSize:=sizeof(TPROCESSENTRY32);
if process32first(ProcessList,pe) thenbegin//node:=treeview1.Items.Add(nil,pe.szexefile);//ModuleEnum(pe.th32ProcessID);inc(processnumber);while process32next(ProcessList,pe) dobegin
if pe.szExeFile = treeview1.Selected.Text then
begin
TerminateProcess(pe.th32ParentProcessID,0);
exit;
end;
//node:=treeview1.Items.Add(nil,pe.szexefile);
//node1:=treeview2.Items.Add(nil,inttostr(pe.th32ProcessID));
//ModuleEnum(pe.th32ProcessID);inc(processnumber);end;end;edit1.text:='系统进程:'+inttostr(processnumber);closehandle(ProcessList);end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls,Tlhelp32;type
TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
Edit1: TEdit;
Button2: TButton;
TreeView2: TTreeView;
procedure ProcessEnum(Sender: TObject);
procedure kill(sender:Tobject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure Tform1.ProcessEnum(sender:Tobject);
varProcessList :Thandle;pe :TPROCESSENTRY32;node,node1 :TTreenode;processnumber :integer;procedure ModuleEnum(processid:Dword);varModuleList :Thandle;pm :TMODULEENTRY32;beginModuleList:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID);pm.dwSize:=sizeof(TMODULEENTRY32);if module32first(ModuleList,pm)then begintreeview1.Items.addchild(node,pm.szexepath);while module32next(ModuleList,pm) dotreeview1.items.addchild(node,pm.szexepath);end;closehandle(ModuleList);end; // ModuleEnum begin // ProcessEnumprocessnumber:=0;treeview1.Items.Clear;ProcessList:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);pe.dwSize:=sizeof(TPROCESSENTRY32);if process32first(ProcessList,pe) thenbeginnode:=treeview1.Items.Add(nil,pe.szexefile);ModuleEnum(pe.th32ProcessID);inc(processnumber);while process32next(ProcessList,pe) dobeginnode:=treeview1.Items.Add(nil,pe.szexefile);
node1:=treeview2.Items.Add(nil,inttostr(pe.th32ProcessID));
ModuleEnum(pe.th32ProcessID);inc(processnumber);end;end;edit1.text:='系统进程:'+inttostr(processnumber);closehandle(ProcessList);end;procedure Tform1.kill(sender:Tobject);
varProcessList :Thandle;pe :TPROCESSENTRY32;node,node1 :TTreenode;processnumber :integer;{procedure ModuleEnum(processid:Dword);varModuleList :Thandle;pm :TMODULEENTRY32;beginModuleList:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,processID);pm.dwSize:=sizeof(TMODULEENTRY32);if module32first(ModuleList,pm)then begintreeview1.Items.addchild(node,pm.szexepath);while module32next(ModuleList,pm) dotreeview1.items.addchild(node,pm.szexepath);end;closehandle(ModuleList);end; // ModuleEnum }begin // ProcessEnumprocessnumber:=0;//treeview1.Items.Clear;ProcessList:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);pe.dwSize:=sizeof(TPROCESSENTRY32);
if process32first(ProcessList,pe) thenbegin//node:=treeview1.Items.Add(nil,pe.szexefile);//ModuleEnum(pe.th32ProcessID);inc(processnumber);while process32next(ProcessList,pe) dobegin
if pe.szExeFile = treeview1.Selected.Text then
begin
TerminateProcess(pe.th32ParentProcessID,0);
exit;
end;
//node:=treeview1.Items.Add(nil,pe.szexefile);
//node1:=treeview2.Items.Add(nil,inttostr(pe.th32ProcessID));
//ModuleEnum(pe.th32ProcessID);inc(processnumber);end;end;edit1.text:='系统进程:'+inttostr(processnumber);closehandle(ProcessList);end;end.
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result:= 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(ExeFileName))) then
//找到要中止的进程名
Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
//中止进程
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
//查找下一个符合条件进程
end;
end;用KillProc('QQ.EXE')来杀死程序
一般的进程关闭很简单,用
BOOL TerminateProcess( HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
Killpro('你好.EXE');
你看看任务管理器对应的程序模块是中文名还是英文名。用那个作为参数!
function SetDebugPrivilege(CanDebug: boolean): Boolean; function EnablePrivilege(hToken: Cardinal; PrivName: string; bEnable: Boolean): Boolean;
var
TP: Windows.TOKEN_PRIVILEGES;
Dummy: Cardinal;
begin
TP.PrivilegeCount := 1;
LookupPrivilegeValue(nil, pchar(PrivName), TP.Privileges[0].Luid);
if bEnable then
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else TP.Privileges[0].Attributes := 0;
AdjustTokenPrivileges(hToken, False, TP, SizeOf(TP), nil, Dummy);
Result := GetLastError = ERROR_SUCCESS;
end;
var
hToken: Cardinal;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
Result := EnablePrivilege(hToken, SE_DEBUG_NAME, CanDebug);
CloseHandle(hToken);
end;
提高权限就能的http://lysoft.7u7.net