Componente TDiskInfo
Este componente permite para recuperar información diversa sobre los Discos existentes en el de sistema; Discos duros, diskettes, discos de red, discos RAM… Colóquelo en un formulario y defina la letra del disco.
Puede recuperar la información sobre:
- Volumem; Etiqueta, número…
- Serial number (no número de volumen)
- Espacio; Libre, total, ocupado.
- Icono del suistema
- Nombre en el Explorer y descripción
- Tipo de disco
- Sistema de ficheros
- Clusters, Sectores,…
- …
- Incluye código fuente
- Incluye EXE (demo)
Historial:
(version 1.2)
Corrected bug at retrive Serial number (not volume number) from various disks.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…
Texto em portuguese – Brazil:
Pegar Número Serial do PenDrive:
http://scissec.scis.ecu.edu.au/conference_proceedings/2007/forensics/23_Luo_Tracing_USB_Device_artefacts_on_Windows_XP.pdf
Colocar no TDiskInfo
Gracias Robson por el comentario.
Lo tendré en cuenta para próximas versiones.
Un saludo.
GRACIAS POR SU GRAN APORTE, EN VERDAD QUE GRACIAS…
MUY BUEN APORTE, EXCELENTE APLICACION, HAY MIL APLICACIONES QUE SON PAGADAS, PERO TU APORTE ME FUE DE MUCHA AYUDA, GRACIAS…
@EDUARDO
De nada.
Siempre stoy abierto a posibles mejoras, de todos los componentes de la página. Cualquier corrección, comentario, mejora,… será bienvenida.
Un saludo.
El componente diskinfo, no trabaja para disco sata, como se puede resolver esto ??
Salu2
@Carlos Perez
Hola Carlos.
Pues yo lo he probado con discos SATA (incluído el mío) y sí me devuelve el serial correcto.
¿Te da algun error? ¿No te lo da correcto?
tu komponente solo funciona kon diskos lógikos???
no puedo obtener información del disko físiko komo tal sino de las particiones k le he hecho….
Hola.
Efectívamente, tal y como comentas funciona sobre particiones.
Un saludo.
Se instalamuy bien y me dá toda la información, excepto el numero de serie del disco.
Me envia este error «», alguien podria decirme que dahcer para resolverlo.
Te antemano gracias
@Octavio Sanchez
Hola Octavio.
Deberías dar más información del S.O., tipo de disco,…
De otra forma es difícil saber porqué no te está funcionando.
El componente me había servido de maravilla….pero con vista no funciona ayudaaaaaaaaaaaaaaaaaa
Estimado neftali, hace tiempo uso tus componentes, principalmente el HardDiskInfo y recientemente estoy instalando todo lo que usaba antes en XP y Delphi 7 en Vista y Delphi 2009 architect para luego migrar los proyectos y me he encontrado con que el componente HardDiskInfo no funciona bien en vista o bien no lo puedo hacer andar. El problema es que no arroja el Nº de serie del disco. Pero si los demas datos. Has comprobado eso? O será error mío. PD. el demo produce el mismo efecto.
Otra cosa, me parece que no funciona el link para bajar la Glib completa. de la parte de componentes.
He buscado en clubdelphi sobre proglemas de glib con vista pero no he visto nada.
SALUDOS Y EXITOS.
Amadis
Hola.
Tengo pendiente revisar los componentes en Windows 7 y con el nuevo Delphi 2010.
Cuando tenga resultados los postearé.
Gracias por el aviso; He corregido en enlace.
Un saludo.
Tengan en cuenta que deben de poner el archivo IDESN.dll junto con el .exe para que tome el numero de serie fisico
@GREKO
Gracias Greko, por el comentario.
Tal vez me pareció tan obvio que olvidé comentarlo.
Hola, el componente no me funciona en Windows Vista/7, Delphi 7 arranca normalmente, me gustaria saber si existe una version mas actual compatible con vista o seven.
Hola Neftalí. Gracias por este maravilloso aporte :) Pero me uno al club de «no funciona en vista / 7″ . Probé a darle compatibilidad con xp, ejecutar como administrador, desde la propia cuenta de administrador. Pero nada, no da el número de serie del HD.
No da ningún otro problema, ni se bloquea…nada. Tan solo que no da el número de serie. Y tengo todo correcto, tal y como me funciona en XP.
Gracias otra vez, un saludo…»maiquemasque»
Efectivamente todo funciona perfectamente en WIN 7 a ecepcion del número de serie, un saludo Neftali. :D
Para las versiones nuevas de Windows, creo que no es la mejor manera de calcular el número de serie, ya que las modificaciones que se hacen invalidan en muchos casos consultas de bajo nivel como esta.
La alternativa que ya he comentado a algun usuario, para los sistemas nuevos, es utilizar el componente TDiskDriveInfo de la librería GlibWMI (http://neftali.clubdelphi.com/?p=589) que podéis encontrar aquí mismo en mi página o en SourceForge (http://sourceforge.net/projects/glibwmi/).
Estos componentes utilizan WMI y en concreto el que os comento (TDiskDriveInfo) segun la documentación de microsoft posee la propiedad SerialNumber.
La descripción de la clase y sus propiedades podéis encontrarla aquí:
http://msdn.microsoft.com/en-us/library/aa394132%28VS.85%29.aspx
Además la propiedad SerialNumber comenta que no está disponible en los sistemas antiguos (XP, NT4,…) por lo tanto me parece un buen complemento para este componente. combinando ambos métodos puede funcionar sin problemas en todos los sistemas.
Un saludo.
Buenas Neftali. Tengo un problemita. No se porqué, al componente en el diseño me funciona perfectamente pero si cambio la unidad en tiempo de ejecución me da un access violation.
Estoy usando Delphi 7 y windows 7, aunque este fallo me ha pasado alguna vez también con xp. Con ese mismo código en otras aplicaciones me ha funcionado.
Gracias por todo
He creado una aplicación nueva, en el form he añadido el componente. En el diseño como ya te he dicho antes me funciona perfectamente. He añadido un botón al form, y en el evento click he puesto:
diskinfo1.DriveLetter:=’c’;
ShowMessage(DiskInfo1.SerialNumber);
En el momento de asignar la letra de la unidad salta el access violation.
Esto me trae de cabeza no se por donde meterle mano.
Gracias.
@Jose
Hola Jose.
¿Has probado la demo? ¿En la demo te funciona correctamente?
Puedes ejecutara paso a paso y ver en qué paso te salta el error. Tienes el código del componente.
Recuerda que cuando se usan DLL en los proyectos debes hacer una lamada a ShareMem.
Un saludo.
Muchisimas gracias por contestar. La demo si que me funciona. En otra aplicación que hice también, pero no se porqué a en esta aplicación y en otras que he hecho me falla.
Como se haría lo de sharemem¿¿??
Miraré de todas formas la demo a ver si veo algo de sharemem.
Muchisimas gracias por las molestias, de verdad. Un saludo.
Ya está, he visto en la demo lo que es el sharemem.
Muchisimas gracias por todo, de veras. Aquí me tienes para lo que necesites.
Enhorabuena por todo lo que tienes desarrollado.
Un abrazo. Cuidate.
Hola Neftalí,
estoy intentando sacar la calidad de la señal wifi a través de WMI, mi problema es el siguiente, al ejecutar este código me salta una excepción ‘EOleException Incompatible 8004100C’ y no sé a que es debido. Me podrías echar un cable por favor?
Gracias!
procedure SignalStrengthValue;
var
Locator : ISWbemLocator;
Services : ISWbemServices;
ObjectSet : ISWbemObjectSet;
ObjRet : OleVariant;
Enum : IEnumvariant;
SObject: ISWbemObject;
value : Cardinal;
SProp: ISWbemProperty;
begin;
Locator := CoSWbemLocator.Create;
Services := Locator.ConnectServer(‘.’, ‘root\wmi’,», », »,», 0, Nil);
ObjectSet:= Services.ExecQuery(‘SELECT * FROM MSNdis_80211_ReceivedSignalStrength’,’WQL’, wbemFlagForwardOnly , nil);
Enum := ObjectSet._NewEnum As IEnumVariant;
while (Enum.Next(1, objRet, Value) = S_OK) do
begin
sObject := IUnknown(objRet) As ISWBemObject;
SProp := SObject.Properties_.Item(‘Ndis80211ReceivedSignalStrength’, 0);
end;
end;