Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Descripción de un/a EXE/DLL

Iniciado por Lord Trancos, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Lord Trancos

                                Como puedo obtener la descripción de un exe o una dll ? (mediante código, claro...)                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

samsaga2

                                Pues te miras el formato del fichero exe y dll y lees los datos que te interesen.

Pasate por:
http://www.wotsit.org/search.asp?s=binary                                

Lord Trancos

                                Ostia que pagina mas chula :riendo:

Pero no me interesa leer el exe,... lo que quiero es obtener la descripcion de los EXEs/DLLs de procesos que se estan ejecutando en memoria... ¿no hay ninguna funcion del api que me de la descripción?                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Emotion

                                Creo que en la MSDN venia un articulo sobre eso que buscas, AL MENOS si que vi un programa compilado (no se si venia con source) en Visual Basic que hacia eso, es decir, cogia el gestor de tareas y te decia no solamente que programas se estaban ejecutando sino que te daba el nombre y te decia incluso cuantos threads estaba generando cada proceso...

Miralo por ahi a ver si lo encuentras... espero que te sea de ayuda, aunque personalmente no lo se...                                
G3: Get the Power!

Javier

                                Lo que buscas está en el API de Windows, es la Tool Help Library; básicamente te permite tomar "snapshots" o instantáneas del sistema en un preciso momento, y entre otras cosas sacar la lista de procesos, módulos y threads activos en el sistema.                                

Lord Trancos

                                Actualmente listo los procesos y sus modulos usando dicha API, pero no me da información acerca de la descripción de los modulos/procesos.... que es lo que quiero... La descripcion es una cadena de texto que el programador le da al programa/dll. Eso es lo que busco.                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Juan Mellado

                                Si ya tienes el módulo (path y nombre del ejecutable) y quieres obtener los valores de la VERSIONINFO busca "Version Information Functions" en la ayuda del Visual.

Es un poco lioso porque tienes que tener en cuenta las opciones de multi-idioma. He adaptado el ejemplo que viene y parece que funciona, pero no lo he probado mucho:

   

#pragma comment(lib, "version.lib")

#include

#define NOMBRE_FICHERO ( "c:windowsnotepad.exe" )

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//Obtiene el tamaño de la estructura con la información del fichero
   DWORD ldw_Handle = 0;
   DWORD ldw_Size = GetFileVersionInfoSize(NOMBRE_FICHERO,
                                           &ldw_Handle);
   
if (ldw_Size > 0){

   
//Reserva la memoria para la información del fichero
        PBYTE lpby_Info =
new BYTE[ldw_Size];

   
//Obtiene la información del fichero
       
if ( GetFileVersionInfo(NOMBRE_FICHERO,
                                0,
                                ldw_Size,
                                (LPVOID)lpby_Info) ){

       
//
       
// Copiado y adaptado del ejemplo de la ayuda, desde aquí ...
       
//

       
//Read the list of languages and code pages.
           
struct LANGANDCODEPAGE {
             WORD wLanguage;
             WORD wCodePage;
           } *lpTranslate;
           UINT cbTranslate;

           VerQueryValue(lpby_Info,
                         TEXT(
"VarFileInfoTranslation"),
                         (LPVOID*)&lpTranslate,
                         &cbTranslate);

       
//Read the file description for each language and code page.
           
for (UINT i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++){

                CHAR SubBlock[16384];
                wsprintf( (CHAR *)SubBlock,
                         TEXT(
"StringFileInfo%04x%04xFileDescription"),
                         lpTranslate.wLanguage,
                         lpTranslate.wCodePage);

             
//Retrieve file description for language and code page "i".
                LPVOID lp_Buffer = NULL;
                UINT lun_Bytes;

                VerQueryValue(lpby_Info,
                              (CHAR *)SubBlock,
                              (LPVOID *)&lp_Buffer,
                              &lun_Bytes);

           
//MIO: Muestra la descripción
                MessageBox(NULL, (CHAR *)lp_Buffer, NOMBRE_FICHERO, MB_OK);
               }

           }
       
//
       
// ... hasta aquí
       
//

   
//Libera la memoria
       
delete [] lpby_Info;
       }

   
return(1);
}


Saludos
                               

Lord Trancos

                                Muchas gracias es justo lo que andaba buscando y funciona de lujo :ojo:                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.