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 14-02-2007
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
¿Función para determinar la capacidad del disco duro?

Saludos al Foro.
Resulta que estoy enfrascado en un sistema de reporte para tener controladas las PC de la empresa.
El sistema cuando ejecuta determina la RAM, el tipo de CPU, el nombre de la PC, si tiene torre de CD y si es RW. Sólo me falta que el sistema determine la capacidad del disco duro. Si conocen alguna función, le agradecería que me la enseñaran.
GRACIAS de antemano.
Responder Con Cita
  #2  
Antiguo 14-02-2007
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.273
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
Revisa la ayuda sobre la función DiskSize en SysUtils.
__________________
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 14-02-2007
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
Mas o menos...

DiskSize(0) returns the size in bytes of the specified drive, where 0 = Current, 1 = A, 2 = B, etc.

Esta via no me conviene:
En la empresa hay PC que tienen varias particiones.
Si lo que quiero es determinar la capacidad total del disco duro de la pC tendría que analizar si está particionado!!! y luego sumar DiskSize(0)+DiskSize(3) suponiendo que la otra particion corresponde al Drive 3.
......
No sé si me hago entender.
GRACias de antemanos.
Responder Con Cita
  #4  
Antiguo 14-02-2007
Avatar de rruz
[rruz] rruz is offline
Miembro Premium
 
Registrado: jun 2006
Posts: 146
Poder: 18
rruz Va por buen camino
Para obtener el tamano fisico de un disco duro debes usar el siguiente codigo de control IOCTL_DISK_GET_DRIVE_GEOMETRY


BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device
IOCTL_DISK_GET_DRIVE_GEOMETRY, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);


busca en este link

http://msdn2.microsoft.com/en-us/library/aa365169.aspx


Si tienes problemas para escribir el codigo en Delphi dimelo y te lo posteo.


Saludos
Responder Con Cita
  #5  
Antiguo 14-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Con el permiso de rruz, que tiene razón con su respuesta, aquí puedes encontrar como usar esa función:

http://www.clubdelphi.com/foros/show...99&postcount=9

O para ser mas precisos la cosa quedaría algo así:
Código Delphi [-]
type
  DISK_GEOMETRY = record
    Cylinders: int64;
    MediaType: Integer;
    TracksPerCylinder: DWORD;
    SectorsPerTrack: DWORD;
    BytesPerSector: DWORD;
  end;

const
  IOCTL_DISK_GET_DRIVE_GEOMETRY = 458752;

function GetDiskSize(Drive: Integer): int64;
var
  hDisk: THandle;
  Geometry: DISK_GEOMETRY;
  Returned: DWORD;
begin
  Result:= -1;
  hDisk:= CreateFile(PChar('\\.\Physicaldrive' + IntToStr(Drive)),GENERIC_READ,
    FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
  if hDisk <> INVALID_HANDLE_VALUE then
  begin
    FillChar(Geometry,Sizeof(Geometry),0);
    if DeviceIoControl(hDisk,IOCTL_DISK_GET_DRIVE_GEOMETRY,nil,0,@Geometry,
      sizeof(Geometry),Returned,nil) then
      with Geometry do
        Result:= Cylinders*TracksPerCylinder*SectorsPerTrack*BytesPerSector;
    CloseHandle(hDisk);
  end;
end;


// Por ejemplo
ShowMessage(IntToStr(GetDiskSize(0)));

O si queremos un listado completo:
Código Delphi [-]
var
  i: integer;
  Str: String;
  Size: int64;
begin
  Str:= '';
  for i:= 0 to 16 do  // Comprobamos un numero razonable de discos
  begin
    Size:= GetDiskSize(i);
    if Size > 0 then
      Str:= Format('Disco %d = %d Bytes' + #13#10,[i,Size]);
  end;
  ShowMessage(Str);
end;
Responder Con Cita
  #6  
Antiguo 15-02-2007
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
gracias

Pude resolver con sus ideas. GRACIAS.
Responder Con Cita
  #7  
Antiguo 15-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya puestos... no te olvides de FormatFileSize para que se acomode la unidad, en KB, MB, GB TB, etc..

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 23-10-2007
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Smile Tambien en lo mismo

Cita:
Empezado por Roilo Ver Mensaje
Saludos al Foro.
Resulta que estoy enfrascado en un sistema de reporte para tener controladas las PC de la empresa.
El sistema cuando ejecuta determina la RAM, el tipo de CPU, el nombre de la PC, si tiene torre de CD y si es RW. Sólo me falta que el sistema determine la capacidad del disco duro. Si conocen alguna función, le agradecería que me la enseñaran.
GRACIAS de antemano.
Hola Roilo, casualmente yo estoy haciendo lo mismo, y me falta: como obtener la RAM y el tipo de CPU, ya tengo todo lo otro. Me podrias ayudar con el codigo para determinar esos datos que me faltan?
Responder Con Cita
  #9  
Antiguo 30-12-2008
Roilo Roilo is offline
Miembro
 
Registrado: nov 2005
Ubicación: Mayarí, Cuba
Posts: 143
Poder: 19
Roilo Va por buen camino
...para determinar la RAM:
Código Delphi [-]
RAM:=trunc(dwTotalPhys/1048576);
label7.caption := floatToStr(RAM)+' MB De Memoria RAM.';

Para determinar procesador (no estoy satisfecho, pero algo hace)
Código Delphi [-]
with TRegistry.Create do   
 try
     RootKey:= HKEY_LOCAL_MACHINE; // <-- La clave root
     if OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0',FALSE) then
     begin
       if    ReadString('ProcessorNameString')<>'' then
        begin
         label8.Caption :=ReadString('ProcessorNameString');
        closekey;
       end
        else
       label8.Caption := 'CPU sin determinar...';
    end;
  finally
     Free;
   end;


Gracias por colaborar...
__________________
...que la libertad sólo existe cuando no es de nadie.

Última edición por Roilo fecha: 30-12-2008 a las 19:13:35.
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
Serial del disco duro Emerson API de Windows 10 12-07-2006 07:44:30
como instalar kylix 3 en Knoppix en disco duro (tipo debian) para que ande bien Robert01 Lazarus, FreePascal, Kylix, etc. 4 27-06-2006 03:29:44
Disco duro malo?? danytorres Varios 1 31-01-2005 17:29:19
Particionar disco duro para instalar linux DarkByte Linux 15 14-02-2004 23:51:47
datos del disco duro seduerey Varios 2 01-07-2003 22:13:09


La franja horaria es GMT +2. Ahora son las 09:45:17.


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