Inicio > Componentes, Delphi, GLibWMI, Programación, WMI > Librería de componentes GLibWMI 3.2

Librería de componentes GLibWMI 3.2

Share Button

GLibWMI es una librería/biblioteca de componentes enfocados a la Administración de Sistemas Windows.
Están basados en la WMI de Windows (Windows Management Instrumentation). Podéis conocer algo más sobre WMI en la entrada del blog titulada «WMI – Introducción«.

ACTUALIZACIÓN 01/02/2024.

Actualmente se ha liberado la versión 3.2 estable (compatible con Delphi 12 Athens).

El código se ha subido en GitHub y en el blog se mantienen las versiones antiguas.
NOTA IMPORTANTE: Debido a problemas con la autentificación de Github la ubicación antigua del proyecto queda obsoleta (https://github.com/NeftaliDelphi/GLibWMI), las nuevas actualizaciones se harán en este repositorio:
https://github.com/germanestevez/GLibWMI

Proyecto en GitHub.

 

 

 

_________________________________________________________

ACTUALIZACIÓN 16/09/2021.

Actualizada la librería de componentes para que funcione con la versión 11 de delphi.

_________________________________________________________

ACTUALIZACIÓN 01/07/2020.

La librería de componentes se ha actualizado a la versión 3.0 considerada como estable (hasta ahoira estaba en fase beta). Se han añadido además nuevas demos y se han actualizado las existentes.

La versión 3.0 cuenta con nuevos componentes y compila sin problemas desde Delphi 6 hasta la versión Delphi 10.3 (por ahora no se ha probado en 10.4, pero debería compilar sin ningun problema).

ACTUALIZACIÓN 03/04/2019.

Actualizada la librería la versión 2.2b. Compatible con Delphi 10.2 (Tokyo) y anteriores.

  • Eliminados Hints y Warnings en los de componentes.
  • Eliminados Hints y Warning en los ejemplos .
  • Se añaden Units a los uses necesarias para versiones nuevas.
  • Se añade fichero incluyendo directivas de compilación.
  • Se generan packages para las nuevas versiones de delphi.

<DESCARGAR LIBRERÍA COMPLETA versión 2.2b>
<DESCARGAR SOURCE DEMOS versión 2.2b>
<DESCARGAR EXE DEMOS versión 2.2b>

_________________________________________________________

ACTUALIZACIÓN:  1o/09/2014.

Liberada la Versión 2.1b.

Nuevas propiedades en los componentes y algunos errores corregidos.

Además la librería se ha compilado con Delphi XE7 sin problemas.

ejemplos_thumb.png

<DESCARGAR LIBRERÍA COMPLETA versión 2.1b>

<DESCARGAR SOURCE DEMOS versión 2.1b>

<DESCARGAR EXE DEMOS versión 2.1b>

_________________________________________________________

ACTUALIZACIÓN:  01/08/2013.

Liberada la Versión 2.0b.

Nuevos componentes añadidos (BootConfigurationInfo, DesktopInfo CodecsInfo, RegistryInfo, TimeZoneInfo) y corrección de algunos bugs.
Compilado para las nuevas versiones de Delphi, incluídas XE4 y XE5.

 Versión 2.0 GLibWMI

<DESCARGAR LIBRERÍA COMPLETA versión 2.0b>

<DESCARGAR SOURCE DEMOS versión 2.0b>

<DESCARGAR EXE DEMOS versión 2.0b>

_________________________________________________________

ACTUALIZACIÓN:  23/02/2010.

Liberada la Versión 1.8b.

Nuevos componentes añadidos y corrección de algunos bugs; Correción en la recuperación de propiedades y algunas pérdidas de memoria.

Actualizadas las demos con los nuevos componentes.

Como la anterior verión, los últimos cambios están subidos en Sourceforge (GLibWMI).

<Descargar librería completa;  Sources+Bin versión 1.8b>

<Descargar demos; Sources+Bin versión 1.8b>

<Descargar demos; Bin versión 1.8b>

_________________________________________________________

ACTUALIZACIÓN:  22/01/2010.

Versión 1.6b.

He subido el proyecto a Sourceforge (GLibWMI). La ultima versión estará disponible allí para su descarga.

Se distribuye con licencia GNU y todos los ficheros (incluídos los fuentes se pueden descargar).

Descargar ficheros:

<GLibWMI completa 1.6b>
<GLibWMI demos 1.6b>
<GLibWMI EXE demos 1.6b>

_________________________________________________________

La librería está en fase beta y se puede usar de forma libre y gratuíta.

Las versiones actuales están disponibles (ficheros compilados) para D6, D7 y D2009.

Se pueden descargar diferentes paquetes:

<GLibWMI>
<GLibWMI para Delphi 6>
<GLibWMI para Delphi 7>
<GLibWMI para Delphi 2009>
<Demos compiladas>>

Funciona sin problemas en sistemas basados en Windows 2000 y posteriores.
Para más información consultar:
«Operating System Availability of WMI Components»

Como bien he dicho, están en fase beta, así que se aditen sugerencias, errores, comentarios,…

Un saludo.

Vota este post
Subscribe
Notify of
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

82 Comments
Inline Feedbacks
Ver todos los comentarios
Jaume
Jaume
7 years ago

Hola Neftalí,
Enhorabuena, te felicito. Es de agradecer esta librería.
¿El serial number de la propiedad SerialNumber del componente DiskDriveInfo de la GLibWMI que se muestra en los distintos discos es el número de serie del Fabricante, o es el que se asigna al formatear?
Saludos y gracias por tu tiempo.

Antonio
Antonio
7 years ago

Hola Neftalí.
Excelentes componentes te mando una felicitación.
Tengo una duda espero me puedas ayudar, con tus componentes podria desde una pc remota basado en una ip o nombre del equipo en red saber el hardware y software instalado en el equipo remoto?
En caso de que si se pueda me podrias ayudar diciendome como poder hacerlo o cual componente usar con un pequeño ejemplo?
De antemano muchas gracias.
Saludos.

Jose
Jose
7 years ago

Hola Neftalí,
Gracias por este aporte, me ha sido de gran ayuda durante mucho tiempo.

Estoy usando delphi 7, y utilizo el componente para obtener el número de serie del disco duro.
He usado tambien el componente TDiskinfo.
Me están surgiendo problemas con discos duros sólidos. TDiskInfo no me devuelve ningun valor, y con GLib me devuelve una cadena que no tiene nada que ver.
El numero de serie real del disco es: H21995***2069, es un disco sólido.
TDiskInfo no me devuelve nada
GLib me devuelve:324839313539304a********2039202020202020
El código con el que obtengo con Glib es:

if (DDInfo.ObjectsCount 0) then
begin
memo1.Clear;
for i := 0 to (DDInfo.ObjectsCount – 1) do
begin
DDInfo.ObjectIndex := i+1;
memo1.Lines.Add(DDInfo.DiskDriveProperties.SerialNumber);
end;
end;

Espero que puedas ayudarme.
Gracias por todo.

Jose
Jose
7 years ago

Germán Estévez :
@Jose
Hola Jose.
La verdad es que no he tenido la oportunidad de comprobar el componente con un disco sólido.
GLibWMI se basa en WMI, así que habría que saber qué devuelve Windows para ese disco duro.
Para ello y siguiewndo las intrucciones de esta entrada (http://neftali.clubdelphi.com/wmi-%e2%80%93-introduccion/) puedes ver la información que Windows tiene del disco.
1) Abre una pantalla de MSDOS (CMD)
2) Escribe lo siguiente:
C:\Windows\System32>wmic diskdrive get Caption, Description, DeviceID, Manufacturer, SerialNumber, Size
Eso te dará la información que el sistema tiene, a través de WMI, de los discos instalados. A ver qué sale ahí. Eso mismo es lo que puede ofrecerte GLibWMI, porque es la información que consulta. Debería ser lo mismo que te devuelve el componente; Si no es así es que hay algún problema en GLibWMI.
Un saludo.

Buenas tardes,
hoy he podido probarlo en un equipo.
Aparece el numero de serie 324839313539304a********2039202020202020.
El caso es que hay aplicaciones que dan información de disco duro que si me lo da bien.
que crees que podrías hacer?, se te ocurre algo? Gracias por todo

Jose
Jose
7 years ago

Jose :

Germán Estévez :
@Jose
Hola Jose.
La verdad es que no he tenido la oportunidad de comprobar el componente con un disco sólido.
GLibWMI se basa en WMI, así que habría que saber qué devuelve Windows para ese disco duro.
Para ello y siguiewndo las intrucciones de esta entrada (http://neftali.clubdelphi.com/wmi-%e2%80%93-introduccion/) puedes ver la información que Windows tiene del disco.
1) Abre una pantalla de MSDOS (CMD)
2) Escribe lo siguiente:
C:\Windows\System32>wmic diskdrive get Caption, Description, DeviceID, Manufacturer, SerialNumber, Size
Eso te dará la información que el sistema tiene, a través de WMI, de los discos instalados. A ver qué sale ahí. Eso mismo es lo que puede ofrecerte GLibWMI, porque es la información que consulta. Debería ser lo mismo que te devuelve el componente; Si no es así es que hay algún problema en GLibWMI.
Un saludo.

Buenas tardes,
hoy he podido probarlo en un equipo.
Aparece el numero de serie 324839313539304a********2039202020202020.
El caso es que hay aplicaciones que dan información de disco duro que si me lo da bien.
que crees que podrías hacer?, se te ocurre algo? Gracias por todo

He estado mirando por internet y he visto que este comando si lo muestra:
wmic path win32_physicalmedia get SerialNumber
Si lo devuelve, no se si podría generarme algun problema al cambiar a esta propiedad.
Saludos.

Jose
Jose
6 years ago

@Germán Estévez

Modifiqué uno de los componentes cambiando la consulta, y obteniendo únicamente el numero de serie y funciona perfectamente.

Gracias por todo.

mdbs99
5 years ago

I would like to suggest to you publish it on Github.
Additionally, if it could compile on FreePascal / Lazarus would be great.

Thanks for your work.

regards,
Marcos Douglas

Startkill
Startkill
5 years ago

Muy buen aporte el tuyo, nos ahorras mucho trabajo…

Gracias por todo

Your friend;

Startkill
Lima-Perú

Alejandro G
Alejandro G
4 years ago

Buenas,

Muy bueno los componentes. He estado mirando el código que está en GitHub y me llamó la atención que los mensjes (Strings) los pusieras como CONST y no como RESOURCESTRING. Ya se que para el caso es lo mismo pero a que se debe estó.

Además he visto que en todos los componentes donde existe la propiedad Availability llegas hasta el enumerado 17 cuando Microsoft llega hasta el 21. Esto puede que sea porque las clases que usaste no lo tenían en su momento?. Igual no es nada grabe porque se los puedo agregar y listo.

Mas allá de esto, quería saber con que programa realizar los iconos, ya que tengo que hacer algunos para unos componentes propios y no se con que haceerlos.

Saludos

Alejandro G
Alejandro G
4 years ago

Buenas,

Muy buenos los componentes. Esto lo conocía pero nunca me puse a investigarlo y ahora se dio. He visto los fuentes de GitHub y me preguntaba porque los strings que muestras los tienes como CONST y no como RESOUSESTRING (aunque para este caso es lo mismo uno que otro).

Por otro lado, he visto que hay un par de métodos que los tienes como published junto con las propiedades que hacen uso de estos. No sería mejor tenerlos como privados y que solo queden publicadas las propiedades?. A lo mejor lo pensaste así por alguna razón que desconosco.

Saludos

Alejandro G
Alejandro G
4 years ago

@Germán Estévez

Mil gracias por las respuestas.

Saludos

Fran
Fran
4 years ago

Hola Germán, desde hace dos años, vengo utilizando en un programa tu componente DiskDriveInfo del paquete GlibWMI, para leer datos de un pendrive que se usa como mochila.
Hasta ahora, todo funcionó correctamente pero de buenas a primeras, sin saber porqué, ha empezado a dar un problema. Al compilar el programa, (puesto que he de hacerlo para cada persona que me lo compra, con datos del pendrive diferentes), da el siguiente error: Project Programa.exe raised exception class EOleException with message ‘OLE error E06D7363’. Process stopped. Use step or run to continue.
No es un error de compilación sino que este se produce al arrancar el programa después de la compilación, puesto que lo primero que hace el programa al arrancar, es leer los datos del pendrive. El programa queda compilado correctamente y funciona sin problemas, leyendo la llave correctamente, pero es muy fastidioso no poder probar las modificaciones directamente desde el IDE de Delphi, más teniendo en cuenta que nunca pasó eso. Pensé que podría haber instalado incorrectamente Delphi o el paquete de componentes, pues tuve que reinstalarlo recientemente (en el mismo ordenador) y no recuerdo si había vuelto a compilar ese programa después, pero volví a reinstalar delphi y el paquete de sin resultado positivo. También pensé que, como al reinstalar delphi, aproveché para descargar la versión más reciente del paquete, igual era esa última versión la que daba el problema, pero he ido instalando las versiones anteriores una por una (no recuerdo la que usaba antes) sin conseguir resolver el problema. Por supuesto cada vez he desintalado la versión instalada y sustituido los paths en Library path y Browsing path.
Por supuesto, también pensé que podría haber pasado algo en el código del programa, a pesar de no haber tocado nada del código recientemente, pero para salir de dudas, hice un pequeño programa que solo incluía el componente, un botón y un Tlabel donde se leía el modelo del pendrive al pulsar el botón y el problema surge igualmente trabajando desde el IDE de Delphi y de la misma forma que mi programa, cuando se arranca el programa fuera de Delphi, funciona perfectamente.
El paquete lo tengo instalado en Delphi 7 y lo utilizo en Windows 10.
Me gustaría preguntarte si tienes alguna idea de donde podría venir ese error. Solo soy aficionado a la programación, no soy profesional (el programa, aunque lo vendo, solo es para colegas de mi afición, el Belenismo, ya que es para controlar Belenes) y el problema me trae loco.
Te agradecería una orientación. Muchas gracias de antemano, y felicitaciones por estos componentes.

Fran
Fran
4 years ago

Se me olvidó indicarte donde se interrumpe la ejecución. Ésta se produce en las líneas marcadas del procedimiento que transcribo, de la unit CWMIBase.

procedure TWMIBase.ConnectWMI();
var
Locator: ISWbemLocator;
begin

try
// Create the Location object
Locator := CoSWbemLocator.Create();
// Connect to the WMI service, with the root\cimv2 namespace

EN LA LÍNEA SIGUIENTE ES DONDE SE INTERRUMPE LA EJECUCIÓN. SI SE PULSA RUN DE NUEVO, SE VUELVE A INTERRUMPIR EN LA SIGUIENTE MARCADA

aServices := Locator.ConnectServer(
Self.FHost, // Host
GetWMIRoot(), // root
{user}STR_EMPTY, {password}STR_EMPTY,
STR_EMPTY, STR_EMPTY, 0, nil);

Self.FConnected := True;
//-MessageDlg(‘Conectado’, mtInformation, [mbOK], 0);
except
Self.FConnected := False;
//-MessageDlg(‘No Conectado’, mtInformation, [mbOK], 0);

//+G EXCEPCION PRPIA

ESTA ES LA SIGUIENTE

raise Exception.Create(GetLastErrorAsString());
end;
end;

Fran
Fran
4 years ago

Gracias por tu respuesta. Respecto a compilar el programa con una versión más reciente de Delphi, lo intenté hace poco, antes de tener el problema que te he comentado, con el objeto de modernizar el aspecto del programa y estar más actualizado, pero desgraciadamente no fué posible instalar en la versión más reciente de delphi dos componentes de terceros que solo los he podido encontrar para Delphi 7 o anteriores y que son insustituibles.
Lo de mandarte el programita lo puedo hacer, pero tendría que mandarte el codigo fuente para que vieras el problema, porque como te digo el programa compilado funciona perfectamente fuera de Delphi. El error solo se produce durante la ejecución desde el entorno de Delphi.
Yo he pensado que eso de que el problema surgiera de buenas a primeras es muy raro. Recuerdo ahora que una versión nueva que estaba preparando con algunas mejoras, la compilé hace unos días sin problema. Lo único que ha cambiado desde entonces es que Windows 10 se ha actualizado dos veces. ¿Podría venir el error por esto, es decir, que debido a la actualización de Windows, el componente haya dejado de ser compatible?.
Te mandaré el código fuente en estos días. Muchas gracias de nuevo por prestarnos tu tiempo y espero que esta consulta te sirva a ti también para las revisiones que haces de tus conponentes. ¡Un saludo!

fran
fran
4 years ago

Si, entendí que te referías al programita de prueba pero hice un «pensamiento en voz alta» nada mas. Ya te lo mandé y a ver si entran las capturas de pantalla, porque de primera no entraban.

Abraão
Abraão
4 years ago

Boa tarde. Existe um modo de validar pelo Delphi se o WMI está sendo executado no computador do cliente? Tive um problema de não obter os dados mas era referente ao WMI que estava com erro.

Makineta
Makineta
3 years ago

Buenas tardes Neftalí,

He estado usando tus componentes pero no he visto forma de obtener la IP de uno de los adaptadores de red así como poder asignar una nueva IP, dns…

Por lo demás, menudo pedazo de componentes, muy muy útiles,…

Saludos y gracias,

Makineta
Makineta
3 years ago

Buenos días Germán,

Hay alguna forma de obtener la IP de una Interface, así como asignar nueva IP, máscara, puerta de enlace y DNS, con estos componentes.

Saludos,

Alejandro G.
Alejandro G.
2 years ago

Buenas,

Estoy teniendo problemas con el método ‘ConnectServer’ de la interfaz ‘ISWbemLocator’. Precisamente lo que pasa es que si la máquina no tiene levantado el servicio este se cuelga y hace que se cuelgue toda la aplicación.

He visto en la documentación de Microsoft que esto debería devolver un código de error, pero como te comente se cuelga y no devuelve nada. Mirando tus componentes veo que tú tampoco tienes atrapado el error como corresponde.

El muchos foros como por ejemplo ‘Stack Overflow’ hablan de esto pero todas las soluciones que proponen ninguna funciona. La única que se me ocurre es antes de hacer la conexión verificar si el servicio está levantado y ahí atrapar el error.

Si sabes de alguna otra forma sería bueno que lo comentes, ya que los otros métodos que se usan para levantar los datos de lo que se quiere también tienen el mismo problema de dejar colgada la aplicación si por alguna razón no está activo el servicio de WMI.

82
0
Would love your thoughts, please comment.x
()
x