怎么关闭一个进程
如何关闭一个进程?
我用CreateProcess()创建一个进程,在任务管理器中可以看到,我应该怎样关闭它?
var
processinfor:Tprocessinformation;
....
begin
CreateProcess(nil,
pchar( 'cmd '),
@security,
@security,
true,
normal_priority_class,
nil,
nil,
start,
processinfor);
end;
我用
closehandle(processinfor.hProcess);
closehandle(processinfor.hThread );
但是没有用.在windows2000的任务管理器中仍能看到cmd.exe.
请问怎样关闭它?谢谢!
------解决方案--------------------
回复:
TerminateProcess( '目标进程句柄, 0(这个参数一般都为0,你也可以用GetExitCodeProcess来取得它的退出码)),
TerminateProcess原型:
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
------解决方案--------------------
这个函数可行
function TFrmServerMain.KillProcess(ProcName: string): boolean;
var lppe: TProcessEntry32;
ssHandle: THandle;
AppFound: Boolean;
begin
ssHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
lppe.dwSize := SizeOf(lppe);
AppFound := Process32First(sshandle, lppe);
while AppFound do
begin
if UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(ProcName) then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
lppe.th32ProcessID), 0);
result:=true;
CloseHandle(ssHandle);
exit;
end;
AppFound := Process32Next(ssHandle, lppe);
end;
result:=false;
CloseHandle(ssHandle);
end;
------解决方案--------------------
china618(▲▲▲▲▲差一千分)
以上的代码只对RING3有效.
------解决方案--------------------
给你一个函数,使用前 Uses TLHelp32;
使用比较简单 比如 killtask( 'qq.exe ');
function KillTask(ExeFileName: string): Integer;
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));
我用CreateProcess()创建一个进程,在任务管理器中可以看到,我应该怎样关闭它?
var
processinfor:Tprocessinformation;
....
begin
CreateProcess(nil,
pchar( 'cmd '),
@security,
@security,
true,
normal_priority_class,
nil,
nil,
start,
processinfor);
end;
我用
closehandle(processinfor.hProcess);
closehandle(processinfor.hThread );
但是没有用.在windows2000的任务管理器中仍能看到cmd.exe.
请问怎样关闭它?谢谢!
------解决方案--------------------
回复:
TerminateProcess( '目标进程句柄, 0(这个参数一般都为0,你也可以用GetExitCodeProcess来取得它的退出码)),
TerminateProcess原型:
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
------解决方案--------------------
这个函数可行
function TFrmServerMain.KillProcess(ProcName: string): boolean;
var lppe: TProcessEntry32;
ssHandle: THandle;
AppFound: Boolean;
begin
ssHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
lppe.dwSize := SizeOf(lppe);
AppFound := Process32First(sshandle, lppe);
while AppFound do
begin
if UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(ProcName) then
begin
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
lppe.th32ProcessID), 0);
result:=true;
CloseHandle(ssHandle);
exit;
end;
AppFound := Process32Next(ssHandle, lppe);
end;
result:=false;
CloseHandle(ssHandle);
end;
------解决方案--------------------
china618(▲▲▲▲▲差一千分)
以上的代码只对RING3有效.
------解决方案--------------------
给你一个函数,使用前 Uses TLHelp32;
使用比较简单 比如 killtask( 'qq.exe ');
function KillTask(ExeFileName: string): Integer;
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));