先贴程序void CProcessDlg::OnKill() 
{

HANDLE hProcessSnap = NULL;
         HANDLE  hProcess;
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == (HANDLE)-1)
{
printf("\nCreateToolhelp32Snapshot()failed:%d",GetLastError());
return;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
     if (Process32First(hProcessSnap, &pe32))
{
do
{
if(FindString2(pe32.szExeFile))//这里是和listbox中的字符串做    比较,就是要关闭listbox中有的进程,listbox中是如realplay.exe的字符串
{
            
//这里我如何获得要关进程的句柄!!!!!!!!!!!!????????

TerminateProcess(hProcess, 0);
}
}
while (Process32Next(hProcessSnap, &pe32));
}
else
{
printf("\nProcess32Firstt() failed:%d",GetLastError());
}

}FindString2的函数如下BOOL CProcessDlg::FindString2(CString strName)
{
CString strContent;
for(int i = 0;i < m_list2.GetCount();i++)
{
m_list2.GetText(i,strContent);
if(strContent.Compare(strName) == 0)
{
return TRUE;
}
}
return FALSE;
}想知道上面问的地方如何获取进程的句柄;希望能详细说说,万分感谢。

解决方案 »

  1.   

    那你写到LIST里的时候就应该把进程的信息存起来啊
      

  2.   

    这段代码对你应该有帮助//根据进程名称取得进程ID
    DWORD getSpecifiedProcessId(const char* pszProcessName) 

        DWORD processId[1024], cbNeeded, dwProcessesCount; 
        HANDLE hProcess; 
        HMODULE hMod;     char szProcessName[MAX_PATH] = "UnknownProcess"; 
        DWORD dwArrayInBytes = sizeof(processId)*sizeof(DWORD);     if (!EnumProcesses(processId, dwArrayInBytes, &cbNeeded)) 
            return 0; 
        //计算数组中的元素个数
        dwProcessesCount = cbNeeded / sizeof(DWORD); 
        enableDebugPriv();     for (UINT i = 0; i < dwProcessesCount; i++) { 
            hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId[i]); 
            if (!hProcess) { 
                continue; 
            } else { 
                if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) { 
                    GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)); 
                    if (!_stricmp(szProcessName, pszProcessName)) { 
                        CloseHandle(hProcess); 
                        return processId[i]; 
                    } 
                } 
            } 
        }     CloseHandle(hProcess); 
        return 0; 
    }
      

  3.   

    ......if(FindString2(pe32.szExeFile))
    {
     DWORD dwProcessID = pe32.th32ProcessID;
     hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
     if( NULL != hProcess )
     {
       TerminateProcess(hProcess, 0);
     }
    }......
      

  4.   

    下面的代码就可以了,简单很多。
    ......if(FindString2(pe32.szExeFile))
    {
     DWORD dwProcessID = pe32.th32ProcessID;
     hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
     if( NULL != hProcess )
     {
       TerminateProcess(hProcess, 0);
     }
     CloseHandle(hProcess);
    }......