Ver Mensaje Individual
  #7  
Antiguo 14-12-2006
wako13 wako13 is offline
Registrado
 
Registrado: sep 2006
Posts: 5
Reputación: 0
wako13 Va por buen camino
Hola:

Si solo necesitas listar los procesos sin la ruta puedes hacerlo con el siguiente código, la ventaja es que funciona en todas las versiones de Windows con cualquier versión de C++Builder. Para probarlo solo necesitas añadir un TListBox (ListBox1) y lo siguiente en el constructor del form:

Código:
// Añadimos:  #include<Tlhelp32.h> 
 
PROCESSENTRY32 proc = { sizeof(proc) }; 
HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
if ( hSysSnapshot != reinterpret_cast<HANDLE>(-1) 
    && Process32First(hSysSnapshot, &proc) ) 
{ 
   ListBox1->Clear(); 
   do 
   { 
      char str[512]; 
      wsprintf(str, "%s  (id=%lu)", proc.szExeFile, proc.th32ProcessID); 
      ListBox1->Items->Add(str); 
   } while ( Process32Next(hSysSnapshot, &proc) ); 
} 
CloseHandle (hSysSnapshot);
Y ya si necesitas la ruta y poder obtener mas información sobre cada proceso puedes usar lo siguiente, aunque solo funciona en NT/2000/XP. En el ejemplo solo se obtiene la ruta como dato extra a la de arriba, pero puedes obtener mucha mas información, para ello mira el apartado PSAPI del API.

Código:
//--- Cargamos dinamicamente la libreria "psapi.dll" 
//  (En versiones mas actualizadas (BCB6) no necesitamos hacer esto. 
//   Solo añadir #include<psapi.h> y la libreria "psapi.lib") 
typedef BOOL  (__stdcall *PFEnumProcesses)(DWORD*,DWORD,DWORD*); 
typedef BOOL  (__stdcall *PFEnumProcessModules)(HANDLE,HMODULE*,DWORD,LPDWORD); 
typedef DWORD (__stdcall *PFGetModuleFileNameEx)(HANDLE,HMODULE,LPTSTR,DWORD); 
 
PFEnumProcesses        fEnumProcesses; 
PFEnumProcessModules fEnumProcessModules; 
PFGetModuleFileNameEx  fGetModuleFileNameEx; 
 
HINSTANCE hLib = LoadLibrary("psapi.dll"); 
if (hLib) 
{ 
    fEnumProcesses = reinterpret_cast<PFEnumProcesses>( 
            GetProcAddress(hLib, "EnumProcesses") ); 
    fEnumProcessModules = reinterpret_cast<PFEnumProcessModules>( 
            GetProcAddress(hLib, "EnumProcessModules") ); 
    fGetModuleFileNameEx = reinterpret_cast<PFGetModuleFileNameEx>( 
            GetProcAddress(hLib, "GetModuleFileNameExA") ); 
 
    if (fEnumProcesses && fEnumProcessModules && fGetModuleFileNameEx) 
    { 
        //--- Obtenemos la lista de indentificadores de proceso 
        DWORD aProcesses[1024], cbNeeded, cProcesses, i; 
        if (!fEnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) 
            return; 
 
        //--- Calculamos cuantos indentificadores fueron devueltos 
        cProcesses = cbNeeded / sizeof(DWORD); 
 
        //--- Mostramos información de cada proceso 
        ListBox1->Clear(); 
        for (i=0; i<cProcesses; i++) 
        { 
            char    szProcessName[MAX_PATH] = "desconocido"; 
            DWORD   processID = aProcesses[i]; 
            HANDLE  hProcess = OpenProcess(PROCESS_QUERY_INFORMATION 
                        | PROCESS_VM_READ, FALSE, processID); 
            HMODULE hMod; 
 
            if (hProcess) 
            { 
                if (fEnumProcessModules(hProcess, &hMod, 
                        sizeof(hMod), &cbNeeded)) 
                { 
                    fGetModuleFileNameEx(hProcess, hMod, 
                            szProcessName, sizeof(szProcessName)); 
 
                    String str(""); 
                    str.sprintf("%s (Process ID: %u)", 
                            szProcessName, processID); 
                    ListBox1->Items->Add(str); 
                } 
                CloseHandle(hProcess); 
            } // if hProcess 
        } // for i 
    } // if 
 
    FreeLibrary(hLib); 
} // if hLib
Codigo by _Leo

Saludos Cordiales

Responder Con Cita