如我在程序中开启了另一个进程.能否再在程序中关闭它.
比如通过其进程句柄或进程ID!

解决方案 »

  1.   

    当然可以!用CreateSnapToolHelp建立进程快照,查找你的进程,killprocess。如何杀死一个进程再csdn上搜索一下就有!
      

  2.   

    应该是CreateToolhelp32Snapshot:参见:
    HANDLE WINAPI CreateToolhelp32Snapshot( 
      DWORD dwFlags, 
      DWORD th32ProcessID 
    );
    下面给一个例子:DWORD id=GetProcessIdFromName("C:\\WINDOWS\\SYSTEM\\PWSTRAY.EXE");
    if(id!=NULL)
    {

    HANDLE myhandle=OpenProcess(PROCESS_ALL_ACCESS,TRUE,id);
    DWORD exitcode=0;
    TerminateProcess(myhandle,exitcode);
       
    }DWORD CMainFrame::GetProcessIdFromName(LPCTSTR name)
    {    PROCESSENTRY32 pe;
    DWORD id = 0;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    pe.dwSize = sizeof(PROCESSENTRY32);
    if( !Process32First(hSnapshot,&pe) )
    return 0;
    CString name1,name2;
    do
    {
    pe.dwSize = sizeof(PROCESSENTRY32);
    if( Process32Next(hSnapshot,&pe)==FALSE )
    break;
            name1=pe.szExeFile;
    name2=name;
    name1.MakeUpper();
    name2.MakeUpper();
    if(strcmp(name1.GetBuffer(0),name2.GetBuffer(0)) == 0)
    {
    id = pe.th32ProcessID;
    break;
    }


    } while(1);
    CloseHandle(hSnapshot);
    return id;
    }
      

  3.   

    http://www.codeproject.com/cpp/kill_process.asp?target=createprocess
      

  4.   

    HANDLE hProcess;
    启动进程:
    LPTSTR lpFileName;
    CString strExeFileName;
    STARTUPINFO stStartUpInfo;
    PROCESS_INFORMATION procinfo; //进程的信息

    memset(&stStartUpInfo, 0, sizeof(STARTUPINFO));

    strExeFileName.Format("Client.exe %d",i);
    lpFileName=strExeFileName.GetBuffer(strExeFileName.GetLength()); CreateProcess(NULL, lpFileName, NULL, NULL, FALSE,
    NORMAL_PRIORITY_CLASS, NULL, 
    NULL, &stStartUpInfo, &procinfo); strExeFileName.ReleaseBuffer(); hProcess=procinfo.hProcess;

    关闭进程:
    TerminateProcess(hProcess,0);
    CloseHandle(hProcess);//释放被终止进程的句柄