马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
// 杀进程实例-用到枚举进程
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h>//声明快照函数的头文件
DWORD GetProcessIDByName( LPSTR pszProcName )
{
//创建当前所有进程的快照
HANDLE hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, NULL );
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot调用失败");
return -1;
}
//枚举所有进程并获取进程名和ID
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
//判断取第一条进程信息是否成功
BOOL bYesOrNo = Process32First( hProcessSnap,&pe32 );
while ( bYesOrNo )
{
printf("进程名:%s\n", pe32.szExeFile );
printf("进程ID:%d\n",pe32.th32ProcessID);
if ( strcmp( pszProcName, pe32.szExeFile ) == 0 )
{
printf( "获取%s进程ID成功!\t", pszProcName );
printf( "ID=%d\n", pe32.th32ProcessID );
CloseHandle(hProcessSnap);
return pe32.th32ProcessID;
}
bYesOrNo = Process32Next( hProcessSnap, &pe32 );
}
CloseHandle(hProcessSnap);
printf("枚举进程失败,你指定的进程不存在!\n");
return 0;
}
void StopProcessByID( DWORD nProcessID )
{
//通过PID或传入的进程ID拿到进程的句柄
HANDLE hProc = OpenProcess( PROCESS_ALL_ACCESS, FALSE, nProcessID );
//通过进程句柄结束指定进程
int nFlag = TerminateProcess( hProc, 0 );
if ( 0 != nFlag)
{
printf( "指定进程已结束\n", nProcessID );
}
else
{
printf( "结否指定进程失败或其可能不存在!\n", nProcessID );
}
}
int main(int argc, char* argv[])
{
//通过进程名取进程ID
DWORD nID = GetProcessIDByName("calc.exe");
//通过进程ID结束指定进程
StopProcessByID( nID );
return 0;
}
|