知道进程名,结束进程,在win2000成功,98下不行,why?
源代码如下:
-------------------------------------------------
#include "stdafx.h"
#include "Tlhelp32.h"
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
HANDLE han= ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照
PROCESSENTRY32 lpp; 
lpp.dwSize =sizeof(PROCESSENTRY32); BOOL bo;
bo=::Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1,*str2; while (bo)
{
str1=lpp.szExeFile ;
str2=_strlwr(str1);
//-----判断是否aa.exe 
if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )
{

HANDLE han2=::OpenProcess(PROCESS_TERMINATE,TRUE,lpp.th32ProcessID); //取进程实例
::TerminateProcess(han2 ,0);  //关闭
}
//-----
bo=::Process32Next(han,&lpp); //取下一个进程信息 } ::CloseHandle(han); //关闭快照 return 0;
}
---------------------------------
同样一个程序,在win2000下任务管理器中,是“R_MCC.EXE”
而到了win98,ctrl+alt+del时就是显示:“r_mcc”了,
if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )就是为了解决这个问题,
但是好像不行。
why?

解决方案 »

  1.   

    使用大小写不区分的函数stricmp试试看。
      

  2.   

    试试:if ((0 == strcmp(str2,"r_mcc.exe")) || (0 == strcmp(str2,"r_mcc")) 
    {
        HANDLE han2 = ::OpenProcess(PROCESS_TERMINATE, FALSE, lpp.th32ProcessID);
        ::TerminateProcess(han2, 0);
        ::CloseHandle(han2);
    }
      

  3.   

    if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )
                                  ~~~ ||
      

  4.   

    to siphonelee(sifone):
    这个地方我也看到了,也改了,好像还是不行。我要疯了。
    为了在98和2000下都可以运行,这个地方可以写成这种形式吗?
      

  5.   

    本人最近刚写了通过进程名关闭进程的代码。拿出来大家共享。 98下的:
    BOOL WINAPI CloseProcessFromName(LPCTSTR lpszProcessName)
    {
    HANDLE hProcessSnap = NULL;
    PROCESSENTRY32 pe   = {0};
    BOOL bRet           = FALSE;
    DWORD dwExitCode    = 820110;  //User defined exitcode
      
    //Take the snapshot of all processes in system
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(INVALID_HANDLE_VALUE == hProcessSnap)
    return FALSE; //Fill in the size of the structure before using it
    pe.dwSize = sizeof(PROCESSENTRY32);

    //Work the snap of the processes, and for each process get
    //the module file name
    if(Process32First(hProcessSnap, &pe))
    {
    MODULEENTRY32 me = {0};

    do
    {
    if(0 == lstrcmp(pe.szExeFile, lpszProcessName))
    {
    HANDLE hProcess;
    hProcess = OpenProcess(PROCESS_TERMINATE, NULL,
    pe.th32ProcessID);
    if(INVALID_HANDLE_VALUE != hProcess)
    {
    //Terminate the specify process
    TerminateProcess(hProcess, dwExitCode);
    //Wait the process to be terminate
    WaitForSingleObject(hProcess, INFINITE);
    dwExitCode = 0;
    GetExitCodeProcess(hProcess, &dwExitCode);
    CloseHandle(hProcess);
    bRet = TRUE;
    }
    }
    }while(Process32Next(hProcessSnap, &pe));
    }
    else
    {
    bRet = FALSE;
    } //Clean up the snapshot
    CloseHandle(hProcessSnap);
    return bRet;
    }2000下的:
    BOOL CloseProcess(LPCSTR lpszProcName)
    {
    char szProcessName[MAX_PATH] = "unknow"; //枚举出所有正在运行的进程
    DWORD dwProcessId[1024], cbNeeded, numProcesses;
    unsigned int i = 0; if(!EnumProcesses(dwProcessId, sizeof(dwProcessId), &cbNeeded))
    return false;
    //计算出进程的数目
        numProcesses = cbNeeded / sizeof(DWORD); for(i=0; i<numProcesses; i++)
    {
    //取得进程的句柄
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|
    PROCESS_VM_READ|PROCESS_TERMINATE, false, dwProcessId[i]); //取得进程的名字
    if(NULL != hProcess)
    {
    HMODULE hMod;
    if(EnumProcessModules(hProcess, &hMod, sizeof(hMod),
    &cbNeeded))
    {
    GetModuleBaseName(hProcess, hMod, szProcessName,
    sizeof(szProcessName));
    }
                //如果是指定的进程则关闭该进程
    if(lstrcmp(lpszProcName, szProcessName))
    {
    TerminateProcess(hProcess, 0);
    CloseHandle(hProcess);
    return true;
    } CloseHandle(hProcess);
    }
    } return false;
    }给分哦~
      

  6.   

    我知道问题在哪里了
    对于test.exe,在2000下,
    pe.szExeFile=“test.exe”
    而在98下,
    pe.szExeFile=“D:\\somefolder\test.exe”
    有个目录在里面。
    呵。