Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
iconos junto a nombres de procesos en timagelist

hola amigos, me he creado una aplicacion la cual me lista todos los procesos que están ejecutandose en mi pc en un listview. Eso va perfecto pero me gustaria mostrar los iconos de los procesos en la primera columna al lado izquierdo del nombre y creo que tengo que añadir un timagelist y asociarlo a smallimagelist pero no tengo ni idea de como obtener el icono del proceso. Para colocarlo creo que tengo que usar imageindex pero no se nada mas. ¿Alguien puede ayudarme?
Responder Con Cita
  #2  
Antiguo 30-10-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En mi web, tienes una aplicación que se llama VProcess, que en su día hice para probar algunas clases de la WMI.
Muestra los procesos que hay funcionando y las características de cada uno.
El código está disponible, así que puedes mirar cómo se obtiene el icono para cada proceso funcionando, a partir del path del ejecutable.

En mi caso utilizo algo así (por si no quieres descargar todo el fuente);

Código Delphi [-]
  //···············································································
  procedure GetFileIconAndDescription(AFileName:string; AIcon: TIcon);
  var
    FileInfo : SHFILEINFO;
  begin

    // Obtener el tipo
    SHGetFileInfo(PChar(AFileName),
                  FILE_ATTRIBUTE_NORMAL,
                  FileInfo,
                  SizeOf(FileInfo),
                  SHGFI_TYPENAME or SHGFI_USEFILEATTRIBUTES
                  );
    // Obtener el icono y copiarlo en un ImageList
    SHGetFileInfo(PChar(AFileName),
                  FILE_ATTRIBUTE_NORMAL,
                  FileInfo,
                  SizeOf(FileInfo),
                  SHGFI_ICON or SHGFI_SMALLICON or
                  SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES
                  );
    AIcon.Handle := FileInfo.hIcon;
  end;
  //···············································································
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 30-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Te puede interesar este hilo que estudia la estructura de los iconos, como conocer y cambiar los iconos de ejecutables en la sección de recursos de ejecutables y dlls.

También debes mirar la API ExtractAssociatedIcon.

Si quieres saber la asociación en el shell de un archivo con su icono, te interesa esto

Todo ello en C/C++


Saludos.

Última edición por escafandra fecha: 30-10-2014 a las 11:56:39.
Responder Con Cita
  #4  
Antiguo 30-10-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por escafandra Ver Mensaje
Todo ello en C/C++
Perdón!!!
No me había fijado en el foro. Lo que te he pasado está en Delphi.
Aun así la llamada a la API tal vez te pueda ser de ayuda.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 30-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Neftali Claro que sirve de ayuda, al fin y al cabo no hay tanta diferencia, sobre todo cuando se usa API de Windows.


Saludos.
Responder Con Cita
  #6  
Antiguo 30-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Nombres de atributos de clase y nombres de propiedades noob OOP 6 29-10-2012 16:05:30
Modelado con ECO junto a Win32 alexlm78 Varios 6 20-09-2007 14:45:07
...en la Vega, junto a una acequia.... marcoszorrilla La Taberna 1 04-06-2007 22:24:41
Empaquetar Bde Junto Al Proyecto? amadis Conexión con bases de datos 6 05-09-2005 17:02:58
ordernar nombres y evitar nombres repetidos en DBLookupComboBox @-Soft Conexión con bases de datos 4 14-01-2004 16:30:51


La franja horaria es GMT +2. Ahora son las 00:54:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi