在VC中查找进程会用到以下几个函数:
::CreateToolhelp32Snapshot(...)//获得当前进程的快照
Process32First(...)//获取第一个进程的句柄
Process32Next(...)//获得下一个进程的句柄
如下例所示:
HANDLE shot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
Process32First(shot,&pe);
char ch[] = "UsbExplore.exe";
do
{
if(strstr(pe.szExeFile,ch))
{
DWORD dwVersion = GetVersion();
if(dwVersion < 0x80000000)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
MessageBox("NT OS");
}
else
AfxMessageBox("9x OS");
HANDLE process = ::OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
if(process)
{
::TerminateProcess(process,0);
MessageBox("进程结束成功");
}
else
AfxMessageBox("进程结束失败");
}
}while(Process32Next(shot,&pe));