关闭notepad的代码,但是运行不成功,大家帮我看看是怎么一回事,谢谢了. HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hProcessSnap)
{
MessageBox("CreateToolhelp32Snapshot error!");
return;
} PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof (PROCESSENTRY32);
if (!Process32First(hProcessSnap, &pe32))
{
MessageBox("Process32First error!");
return;
}
do 
{
if (0 == strcmp("NOTEPAD.EXE", pe32.szExeFile))
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe32.th32ProcessID);
                                                                                  //这个id和任务管理器对过,一样
if (NULL != hProcess)
{
BOOL bRet = TerminateThread(hProcess, 1); //返回值0
int nError = GetLastError(); //返回值6,无效句柄,why???
return;
}
} memset(&pe32, 0, sizeof (PROCESSENTRY32));
pe32.dwSize = sizeof (PROCESSENTRY32);

} while (Process32Next(hProcessSnap, &pe32));百思不得其解,还请多多指教,不胜感激.

解决方案 »

  1.   

    BOOL bRet = TerminateThread(hProcess, 1); //返回值0
    =================
    这里关闭的是一个线程,你应该用TerminateProcess
    另外,
    memset(&pe32, 0, sizeof (PROCESSENTRY32));
    pe32.dwSize = sizeof (PROCESSENTRY32);} while (Process32Next(hProcessSnap, &pe32));这个前面的memset等可以不用了,因为前面已经初始化过了
      

  2.   

    另外,还有个问题,if (0 == strcmp("NOTEPAD.EXE", pe32.szExeFile))这里,你比较的是进程名是大小字母的,但实际上,进程名是有可能是小写字母的,所以应该先将pe32.szExeFile用CharUpper转成大写再比较