Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Detectar capacidad total de varios módulos de memoria

Hola de nuevo:

Estoy intentando averigar la memoria total de un ordenador. He encontado este código en la web de SwissDelphiCenter:

http://www.swissdelphicenter.ch/en/showcode.php?id=94

Sin embargo, cuando el ordenador dispone de más de un módulo de memoria, únicamente obtengo la memoria total de un único módulo. ¿Alguna solución?

Última edición por Jose_Pérez fecha: 02-08-2012 a las 14:43:42.
Responder Con Cita
  #2  
Antiguo 02-08-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, recuerda poner títulos descriptivos a lo que se pregunta, gracias
Responder Con Cita
  #3  
Antiguo 02-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Por favor, recuerda poner títulos descriptivos a lo que se pregunta, gracias
Tienes razón. Hecho.
Responder Con Cita
  #4  
Antiguo 02-08-2012
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.275
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
Si buscas en los foros sobre WMI verás que hay bastantes mensajes al respecto. También puedes encontrar aplicaciones de ejemplo.
En este caso la clase que creo que te interesa es WIN32_PhysicalMemory.
Con ella puedes obtener los bancos de memoria y la cantidad en cada uno de ellos.
__________________
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 17-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Hola Naftali:

Estoy trabajando con Delphi 5 y Windows XP. Estoy intentando importar la libería de WMI, pero no me aparece el objeto Microsoft DTSPackage Object Library (Versión X.X). ¿Cómo puedo hacerlo?
Responder Con Cita
  #6  
Antiguo 17-08-2012
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.275
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
Si estás con WMI en todo caso la que tendrás que importar será la librería: “Microsoft WMI Scripting V1.2 Library” (o similar).
__________________
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
  #7  
Antiguo 20-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Si estás con WMI en todo caso la que tendrás que importar será la librería: “Microsoft WMI Scripting V1.2 Library” (o similar).
Hmmm... pareces sorprendido por mi pregunta.

Como bien dices, la librería es “Microsoft WMI Scripting V1.2 Library". Yo únicamente seguí el artículo de tu web al pie de la letra

http://neftali.clubdelphi.com/?p=185

...que enlaza por error desde...

Para acceder desde Delphi a WMI lo primero que necesitamos en Importar la librería desde el menú de Project/Import Type Library (pasos aquí): en http://neftali.clubdelphi.com/?p=523

... de ahí el lío.

Última edición por Jose_Pérez fecha: 20-08-2012 a las 14:53:03.
Responder Con Cita
  #8  
Antiguo 20-08-2012
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.275
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
Bueno, no enlaza por error, lo que sí es verdad es que a lo mejor la explicación no es clara:

En este artículo se explica cómo importar una librería. Sirve para cualquier librería, sólo que cambiando la librería a importar. Lo realmente importante son los pasos a realizar.

Lo que intentaba decir en este segundo artículo era, que se importara la librería “Microsoft WMI Scripting v1.X Library (Version 1.X)“, siguiendo las pasos que se describían en el artículo. Pero cambiando el nombre de la librería (tal vez eso es lo que no aclaré bien)...
__________________
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
  #9  
Antiguo 20-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
En cualquier caso, siempre es un placer encontrar en internet a gente como tú que dedica su tiempo en transmitir sus conocimientos a los demás. Gracias!!!
Responder Con Cita
  #10  
Antiguo 21-08-2012
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
¿Has tratado de probar de esta forma?

Código Delphi [-]
PERFORMANCE_INFORMATION = record
  cb: DWORD;
  CommitTotal: DWORD;
  CommitLimit: DWORD;
  CommitPeak: DWORD;
  PhysicalTotal: DWORD;
  PhysicalAvailable: DWORD;
  SystemCache: DWORD;
  KernelTotal: DWORD;
  KernelPaged: DWORD;
  KernelNonpaged: DWORD;
  PageSize: DWORD;
  HandleCount: DWORD;
  ProcessCount: DWORD;
  ThreadCount: DWORD;
end;
PPERFORMANCE_INFORMATION = ^PERFORMANCE_INFORMATION;

function GetPerformanceInfo(pPI: PPERFORMANCE_INFORMATION; cb: DWORD): boolean; stdcall; external 'psapi.dll';

//............................

var
 PI: PERFORMANCE_INFORMATION;
begin
 GetPerformanceInfo(@PI, sizeof(PI));
 ShowMessage('Memoria total: ' + IntToStr(PI.PhysicalTotal * PI.PageSize) + ' Bytes');
end;

(Probado en WinXP Sp3, Delphi7 y PC con dos módulos de memoria RAM).


Saludos.

Última edición por escafandra fecha: 21-08-2012 a las 19:53:05.
Responder Con Cita
  #11  
Antiguo 23-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Código Delphi [-]
function GetPerformanceInfo(pPI: PPERFORMANCE_INFORMATION; cb: DWORD): boolean; stdcall; external 'psapi.dll';
La idea es crear una aplicación que realice un inventario de todos los equipos en red. Veo que esta función "tira" de una DLL. Mi duda es, ¿una vez compilado el ejecutable, es necesario que exista esta DLL en los equipos de la red para que funcione?
Responder Con Cita
  #12  
Antiguo 23-08-2012
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
Cita:
Empezado por Jose_Pérez Ver Mensaje
La idea es crear una aplicación que realice un inventario de todos los equipos en red. Veo que esta función "tira" de una DLL. Mi duda es, ¿una vez compilado el ejecutable, es necesario que exista esta DLL en los equipos de la red para que funcione?
Esa DLL (psapi.dll) forma parte del S.O. (Windows) por lo tanto todos los equipos la tienen. En delphi 7 debes importarla (como muestro) para que compile, en versiones posteriores probablemente no.

Claro que con el ejemplo cada equipo local sabrá su memoria pero tendrás que establecer un sistema para que se informe al servidor, puesto que dices que la idea es un sistema en red...

Como al inicio del tema comentabas un ejemplo para equipo local, que no te funcionaba en todos los PCs probados, escribí mi ejemplo para solucionar tu problema. A mi me funciona, pero pruébalo con tus condiciones y dime si el resultado es satisfactorio.


Saludos.
Responder Con Cita
  #13  
Antiguo 23-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Claro que con el ejemplo cada equipo local sabrá su memoria pero tendrás que establecer un sistema para que se informe al servidor, puesto que dices que la idea es un sistema en red...
La idea es hacerlo mediante Sockets. Nunca lo he hecho. Llevo 25 años programando (no siempre en Delphi, claro ) y la verdad es que siempre hay algo nuevo por hacer y por aprender. Llegado el momento, si tengo alguna duda, ya abriré un nuevo hilo en el foro.

Pero primero quiero terminar con el desarrollo de la captura de configuración del equipo.

Cuando pruebe tu código en un equipo con dos módulos de memoria te digo algo.
Responder Con Cita
  #14  
Antiguo 23-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Si estás con WMI en todo caso la que tendrás que importar será la librería: “Microsoft WMI Scripting V1.2 Library” (o similar).
Para los no iniciados en WMI, como es mi caso, he encontrado una función muy buena que permite leer las propiedades de las clases con WMI.

http://delphi.xcjc.net/viewthread.php?tid=46207

En mi caso, como ya dije, trabajo con Delphi 5. Una vez importada la libreria que nos indicaba Neftali, he añadido ActiveX y WbemScripting_TLB a las uses.

Saludos.
Responder Con Cita
  #15  
Antiguo 23-08-2012
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.275
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
Básicamente así es como se usa WMI; Ya ves que una vez importada la libería con un código como ese ya puedes consultar lo que necesitas.
El el FTP del club, hay varios ejemplos sobre WMI, y si te fijas en el código, es bastante similar a ese.
__________________
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
  #16  
Antiguo 27-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
Ahora se me plantea otra duda.

Partiendo de la función a la que hacía referencia...

http://delphi.xcjc.net/viewthread.php?tid=46207

...por ejemplo, ¿cómo puedo acceder a la propiedad caption de la clase Win32_Printer de todos los elementos para listar todas las impresoras instaladas?
Responder Con Cita
  #17  
Antiguo 27-08-2012
Jose_Pérez Jose_Pérez is offline
Miembro
 
Registrado: may 2003
Posts: 156
Poder: 21
Jose_Pérez Va por buen camino
No me habá dado cuenta. Funciona bien tal cual está...

Código Delphi [-]
While (Enum.Next(1,TempObj,Value)=S_OK) Do
        begin
     
        // Recorre todos los elementos.

        end;

Únicamete habría que cambiar la fuinción para que delvolviera una lista en lugar de un String.
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
Detectar memoria USB LuisAlf:: Varios 15 30-04-2013 04:16:46
Como obtener la Capacidad Total del Disco Duro, independientemente de las particiones JoAnCa API de Windows 16 26-06-2012 09:45:54
Una aplicacion, varios modulos mjjj Varios 3 09-03-2010 16:32:08
Necesito ayuda para cargar varios sonidos en memoria Loreiev Varios 7 21-11-2008 00:00:29
Detectar corrupción de memoria ALAM C++ Builder 1 27-07-2007 12:09:19


La franja horaria es GMT +2. Ahora son las 09:20:43.


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