读书人

还是关于结束进程的有关问题

发布时间: 2012-03-31 13:13:26 作者: rapoo

还是关于结束进程的问题
如果运行多个notepad.exe的话是可以关掉的,如果运行多个IEXPLORE.EXE是关不掉的.怎么解决呢?


#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <string.h>

void KillProcessFromName(LPCTSTR name);

void main()
{
KillProcessFromName( "notepad.exe ");//这里如果改为IEXPLORE.EXE就不行
}

void KillProcessFromName(LPCTSTR name)//name为你要终止的进程的名称,Win9X则需包括路径
{
PROCESSENTRY32 pe;//定义一个PROCESSENTRY32结类型的变量
HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);// 创建快照句柄
pe.dwSize = sizeof(PROCESSENTRY32);//一定要先为dwSize赋值
if (Process32First(hShot,&pe))
{
do
{
if (strcmp(pe.szExeFile,name)==0) //判断此进程是否为你要终止的进程
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);//如果是就利用其ID获得句柄
TerminateProcess(hProcess,0);//终止该进程
}
}
while(Process32Next(hShot,&pe));
}
CloseHandle(hShot);
}


[解决办法]
ie的进程名称有时候是全大写,有时候又是小写的,用strcmp来比较时是需要大小写全部匹配的,把strcmp改成stricmp(vc8.0的话,_stricmp比较好),下面这样:
void KillProcessFromName(LPCTSTR name)//name为你要终止的进程的名称,Win9X则需包括路径
{
PROCESSENTRY32 pe;//定义一个PROCESSENTRY32结类型的变量
HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);// 创建快照句柄
pe.dwSize = sizeof(PROCESSENTRY32);//一定要先为dwSize赋值
if (Process32First(hShot,&pe))
{
do
{
if (stricmp(pe.szExeFile,name)==0) //vc8.0用_stricmp替换stricmp
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);//如果是就利用其ID获得句柄
TerminateProcess(hProcess,0);//终止该进程
}
}
while(Process32Next(hShot,&pe));
}
CloseHandle(hShot);
}

读书人网 >C语言

热点推荐