本篇文章给大家谈谈terminateprocess,以及terminateprocess内存泄漏对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
delphi如何强制结束进程?
强制结束进程誉枣羡有庆拍两种.
1.结束自身程序就使用
Application.Terminate;
2.结束其它正在执行的程序.
使用进程快照的方法找到相关进程,然后结束.
function TFrmImportExcel.FindProcess(AFileName: string): boolean;
var
hSnapshot: THandle;//用于获得进程列表
lppe: TProcessEntry32;//用于查找进程
Found: Boolean;//用于判断进程遍历是否完成
KillHandle: THandle;//用于杀死进程
begin
Result :=False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程列表
lppe.dwSize := SizeOf(TProcessEntry32);//在调用Process32First API之前,需要初始化lppe记录的大小
Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe记录中
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then
begin
{if MsShow('发现打开Excel,是否将其关闭?',2)=6 then
begin
//由于我的岩散操作系统是xp,所以在调用TerminateProcess API之前
//我必须先获得关闭进程的权限,如果操作系统是NT以下可以直接中止进程
KillHandle := OpenProcess(PROCESS_TERMINATE, False, lppe.th32ProcessID);
TerminateProcess(KillHandle, 0);//强制关闭进程
CloseHandle(KillHandle);
end;}
Result :=True;
end;
Found := Process32Next(hSnapshot, lppe);//将进程列表的下一个进程信息读入lppe记录中
end;
end;procedure TFrmImportExcel.EndProcess(AFileName: string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapShotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
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(AFileName)) or (UpperCase(FProcessEntry32.szExeFile )=UpperCase(AFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0);
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
//调用
if FindProcess('EXCEL.EXE') then
begin
if MsShow('检测到打开了Excel,是否让其关闭?',2)6 then Exit;
EndProcess('EXCEL.EXE');
end;
C++ 要关闭某个进程的函数是哪个
TerminateProcess
这个函数可以用来终止或者说杀死一个进程答闭早,它不会留给进程及其态基所有线程清理的时间,系统会马上终止(杀死)这个进程的所有线程,致使进程终止。在使用此函数前我们必须要调用OpenProcess函数来获得我们要终止(杀死)进程的句柄,并且要获得进程的PROCESS_TERMINATE权限。
函数原型:
BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode)
参数说明:
1、hProcess:要终止(杀死)进程的句柄,需要有PROCESS_TERMINATE权限。
2、uExitCode:设置进程的退出值。可通过GetExitCodeProcess函数得到一个进程的退出值。
返回值:
如果失败将返回FALSE(0),而成功将返回一个非零值。
注:不要用if(ret==TRUE)去检测函数是否调用成功,因为函数调用成功会返回一个非零值,但不一定是TRUE(1)
使用例子:
//此函数通过传入的进程清雀ID来终止(杀死)进程
BOOL KillProcess(DWORD ProcessId)
{
HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,ProcessId);
if(hProcess==NULL)
return FALSE;
if(!TerminateProcess(hProcess,0))
return FALSE;
return TRUE;
}
怎么用C语言结束一个进程?求代码
基本思路:
1. 用Process32First+Process32Next枚举所有进程。
2. 对枚举的进程取程序名,比较是不是要关掉的程序。
3. 如是,调用TerminateProcess()结束它。
有的程稿隐序一启动就不止一个进程,所以即使关掉一个,也继续枚举。
用法例:kp iexplore.exe 关闭IE进程(所有IE浏览器的窗口都关掉)
/********************************************
文件模敬旁名:kp.c
程序名:kp.exe
用法例:kp iexplore.exe
********************************************/
#include windows.h
#include tlhelp32.h
int KillMyProcess(char *exeName)
{
int rc = 0;
HANDLE hSysSnapshot = NULL;
PROCESSENTRY32 proc;
hSysSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );
if ( hSysSnapshot == (HANDLE)-1 ) return 1;
proc.dwSize = sizeof(proc);
if ( Process32First ( hSysSnapshot, proc ) ) {
do {
if (stricmp(proc.szExeFile, exeName)==0) {
HANDLE Proc_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc.th32ProcessID);
if (Proc_handle==NULL || !TerminateProcess(Proc_handle, 0)) rc = 1;
else rc = 0;
}
} while ( Process32Next ( hSysSnapshot, proc ) );
}
CloseHandle ( hSysSnapshot );
return rc;
}
int main(int argc, char *argv[])
{
if (argc1) {
printf("Kill %s....\n"旦橡, argv[1]);
if (KillMyProcess(argv[1])==0) printf(" --- Process is killed.\n");
else printf(" --- Process is not killed \n" ) ;
}
return 0;
}
关于terminateprocess和terminateprocess内存泄漏的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
还没有评论,来说两句吧...