C++ Obtener el PID del proceso por nombre del proceso
void CLoaderDlg::UpdateProcessList()
{
UpdateData. ( VERDADERO);
m_ProcList.DeleteAllItems();
MYHOOKSTRUCT ProcHookArry[20];
memset(ProcHookArry,0,20*sizeof(MYHOOKSTRUCT)) ;
int nCount = 0
CString str="";
//Segundo=1;
PROCESSENTRY32 pe32;/ / estructura de información del proceso
pe32.dwSize = sizeof(pe32); // El tamaño debe completarse primero.
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
MessageBox( "Error en la llamada a CreateToolhelp32Snapshot", "Advertencia");
return;
}
BOOL bMore = ::Process32First(hProcessSnap,& amp;pe32);
while(bMás)
{
/Nota: Cuando se selecciona ordenar en un control de cuadro de lista, el ID no coincide con el nombre del programa.
if(strcmp(strupr(pe32.szExeFile), "NOTEPAD.EXE")==0)
{
ProcHookArry[nCount].ProcessID= pe32.th32ProcessID;
ProcHookArry[nCount].ThreadID=GetThreadId(pe32.HookFlag=0;
nCount++;
}
bMás = ::Process32Next(hProcessSnap,&pe32);
}
::CloseHandle( hProcessSnap);
for(int i=0;i { for(int j=0;j { if(ProcHookArry[ i] .ThreadID==m_ProcHookArry[j].ThreadID) { ProcHookArry[i].hHook=m_ProcHookArry[j].hHook; ProcHookArry [i].hWnd=m_ ProcHookArry[j].hWnd; ProcHookArry[i].ProcessID=m_ProcHookArry[j].ProcessID; ProcHookArry[i].HookFlag=m_ProcHookArry [j ].HookFlag; strcpy(ProcHookArry[i].Name,m_ProcHookArry[j].Name); break; } } memcpy(m_ ProcHookArry,ProcHookArry,nCount*sizeof(MYHOOKSTRUCT)); m_HookArryLen=nCount; int index=0; for(int n=0;n { str.Format("%d",m_ProcHookArry[n]. ThreadID); index=m_ProcList.GetItemCount(); m_ ProcList.InsertItem(index,str); m_ProcList.SetItemText(index,1, m_ProcHookArry[n].SetItemText(index,2,str); } char buf[100]={0}; ::GetWindowText( m_ProcHookArry[n].hWnd,buf,100); str=buf; m_ProcList.SetItemText(index,3,str); // ::SendMessage(m_ProcHookArry[n].hWnd,WM_CLOSE,0,0); } UpdateData( FALSE); }