假设我想写一个类似于taskkill的GUI程序
用到TerminateProcess函数
但是我该如何获得想要关闭的进程的句柄?

解决方案 »

  1.   

    一般是用CreateToolhelp32Snapshot(),Process32First()和 Process32Next()进行进程枚举,然后可以得到进程句柄
      

  2.   


            HANDLE snapshot;
    snapshot=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 processliststr[50];
    for(int j=0;j<50;j++)
    processliststr[j].dwSize=sizeof(PROCESSENTRY32);
    BOOL return_value;
    int i=0;
        int m;
    return_value=::Process32First(snapshot,&processliststr[i]);
    m_showlist.DeleteAllItems();

    CString str; while(return_value)
    {
             m=m_showlist.InsertItem(i,(LPTSTR)processliststr[i].szExeFile);
      
      str.Format("%d",processliststr[i].cntThreads);
      m_showlist.SetItemText(m,1,str);
            
      str.Format("%d",processliststr[i].th32ProcessID);  
      m_showlist.SetItemText(m,2,str);
          
      str.Format("%d",processliststr[i].pcPriClassBase);
      m_showlist.SetItemText(m,3,str);
                   m_ProcessIndex[i]=processliststr[i].th32ProcessID;
      i++;
      return_value=::Process32Next(snapshot,&processliststr[i]);   
        
    }