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
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
  #2  
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
  #3  
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
  #4  
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
  #5  
Antiguo 15-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
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
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 23:07:58.


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