Ver Mensaje Individual
  #6  
Antiguo 30-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
El principal problema que tenia era obtener las rutas completas de cada proceso pero al final lo he conseguido hacer así:
Código PHP:
TIcon *Icon//Para el icono del proceso

char strPath[MAX_PATH 1];
memset(strPath,0,(MAX_PATH-1));

if(
GetPathFromPID(processInfo.th32ProcessID,strPath))
{  
//SI OBTENGO LA RUTA COMPLETA DEL PROCESO
    // Creo un TIcon temporal
    
Icon = new TIcon;

    
//INTENTO COLOCAR EL ICONO DE CADA PROCESO
    
GetFileIconAndDescription(strPath,Icon);
    
ListItemsProcesos->Item[ListItemsProcesos->Count-1]->ImageIndex Form1->ImageList1->AddIcon(Icon);

    
delete Icon;

Y las funciones:
Código PHP:
// Obtiene el Path de un ID de Proceso (PID) Activo en Memoria.
bool GetPathFromPID(int PIDchar *FullPath)
{
   
HANDLE hProcess;
   
char Path[MAX_PATH 1];
   
bool retval false;
   
HINSTANCE hLib;

   
hProcess OpenProcess(PROCESS_QUERY_INFORMATION PROCESS_VM_READfalsePID);
   if( 
hProcess != ){
      try{
         
hLib LoadLibrary("psapi.dll");
         if(
hLib!=0)
         {
            
pGetModuleFileNameEx = (bool (__stdcall *) (void*, void*, char*, unsigned long)) GetProcAddress(hLib,"GetModuleFileNameExA");
            if(
pGetModuleFileNameEx != NULL)
            {
               if( 
pGetModuleFileNameEx(hProcess0Pathsizeof(Path)) != ){
                  
strcpy(FullPath,Path);
                  
retval true;
               }
            }
         }
      }catch(...){
      }
      
CloseHandle(hProcess);
   }else{
      
//raise Exception.Create('El Programa No Se Encuentra Activo en Memoria');
   
}
   return 
retval;
}
//---------------------------------------------------------------------------

void GetFileIconAndDescription(AnsiString AFileNameTIcon *AIcon)
{
    
SHFILEINFO FileInfo;

    
// Obtener el tipo
    
SHGetFileInfo(AFileName.c_str(),
                  
FILE_ATTRIBUTE_NORMAL,
                  &
FileInfo,
                  
sizeof(FileInfo),
                  
SHGFI_TYPENAME SHGFI_USEFILEATTRIBUTES
                  
);
    
// Obtener el icono y copiarlo en un ImageList
    
SHGetFileInfo(AFileName.c_str(),
                  
FILE_ATTRIBUTE_NORMAL,
                  &
FileInfo,
                  
sizeof(FileInfo),
                  
SHGFI_ICON SHGFI_SMALLICON |
                  
SHGFI_SYSICONINDEX SHGFI_USEFILEATTRIBUTES
                  
);
    
AIcon->Handle FileInfo.hIcon;

Neftali lo del icono lo tenia igual que tu pero solo que yo no lo tenia en una funcion y despues de ver la tuya lo he puesto igual. Gracias.
¿Alguien me dice si hay algo que se me pasa? Funcionar funciona pero no se si hago algo que no deba.
El dolor de cabeza mas grande fue obtener la ruta como ya dije ya que para que pueda hacerlo necesitaba psapi.lib y no pude encontrarlo pero si pude encontrar la dll y usar la funcion dinamicamente jejeje.
Muchas gracias amigos.
Responder Con Cita