通常情况下,让程序自己结束是最理想的。当进程正常退出时,会调用ExitProcess()函数。通过调用SendMessage()函数向目标窗口发送WM_CLOSE消息,程序将正常结束并退出。本文介绍一种类似任务管理器的功能,可以强制结束指定进程。1、结束指定进程的示例代码展示了如何通过结束记事本来结束其他进程。结束记事本进程的代码如下:#includeintmain(intargc,char*argv[]){HWNDhNoteWnd=FindWindow(NULL,"Untitled-Notepad");if(hNoteWnd==NULL){return-1;}DWORDdwNotePid=0;GetWindowThreadProcessId(hNoteWnd,&dwNotePid);if(dwNotePid==0){return-1;}HANDLEhNoteHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwNotePid);if(hNoteHandle==NULL){return-1;}BOOLbRet=TerminateProcess(hNoteHandle,0);if(bRet==TRUE){MessageBox(NULL,"EndProcessSuccessfully",NULL,MB_OK);}CloseHandle(hNoteHandle);return0;}编译连接以上程序,然后再打开一个空的记事本程序,运行编译好的程序,你会发现记事本程序的进程已经终止了,这里的程序会弹出一个简单的对话框,提示“进程已经成功终止”.2、结束进程所需的API函数说明在上面的程序代码中,使用了四个API函数来结束进程,分别是FindWindow()、GetWindowThreadProcessId()、OpenProcess()和TerminateProcess()。GetWindowThreadProcessId()函数定义如下:DWORDGetWindowThreadProcessId(HWNDhWnd,LPDWORDlpdwProcessId);参数说明如下。hWnd:窗口句柄,代码中的窗口句柄是通过FindWindow()函数获取的。lpdwProcessId:该参数是一个DWORD类型的指针,用户返回窗口句柄对应的进程ID。GetWindowThreadProcessId()函数获取进程ID后,将进程ID传递给OpenProcess()函数,获取进程句柄。OpenProcess()函数的定义如下:HANDLEOpenProcess(DWORDdwDesiredAccess,BOOLbInheritHandle,DWORDdwProcessId);参数说明如下。dwDesiredAccess:开启进程想要获得的访问权限。为方便起见,此参数可以始终为PROCESS_ALL_ACCESS。bInheritHandle:指定获取的句柄是否可以继承,一般选择不继承,传入值为FALSE。dwProcess:指定要打开的进程ID号,通过GetWindowThreadProcessId()获取。该函数的返回值是进程的句柄,通过它可以调用TerminateProcess()函数终止。TerminateProcess()函数定义如下:BOLTerminateProcess(HANDLEhProcess,UINTuExitCode);参数说明如下。hProcess:要终止的进程的进程句柄,已通过OpenProcess()函数获得。uExitCode:进程的退出代码,通常为0值。通过一系列的API函数,完成一个结束进程的程序。结束程序的第一步是获取窗口句柄。如果进程没有窗口,有没有办法通过程序结束进程呢?其实还是有办法的。从上面三个API函数可以看出,可以通过进程的窗口获取进程的ID,通过进程的ID可以获取进程的句柄。它们都是内部相关的。因此,当你需要使用相关资源时,如果不能直接获取,不妨通过这种方式一步步获取。