Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #15  
Antiguo 25-06-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Coloco de nuevo el código completo para que no aparezca el problema con la Cte IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS en los usuarios que copien el código tal cual:

Código Delphi [-]
uses
  Windows, SysUtils;

const
  IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = $00560000;

function GetPhysicalDrive(Volume: Char): integer;
var
  hFile: THandle;
  Vde: array [0..56] of BYTE;
  BytesReturned: Cardinal;
begin
  Volume:= char((ord(Volume) or 32)-32);
  Result:= -1;
  hFile:= CreateFile(PAnsiChar('\\.\' + Volume + ':'),0,0,nil, OPEN_EXISTING, 0, 0);
  if hFile <> INVALID_HANDLE_VALUE then
  begin
    if DeviceIoControl(hFile, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, nil, 0, @Vde, SizeOf(Vde), BytesReturned, nil) then
      Result:= PBYTE(DWORD(@Vde)+8)^;
    CloseHandle(hFile);
  end;
end;

function GetDriveSizeFromVol(D: char): UINT64;
var
  LD: DWORD;
  Ch: char;
  Disk: DWORD;
begin
  Result:= 0;
  Disk:= GetPhysicalDrive(D);
  LD:= GetLogicalDrives();
  Ch:= 'A';
  while LD <>0 do
  begin
    if ((LD and $1) = 1) and (GetPhysicalDrive(Ch) = Disk) then
      Inc(Result, DiskSize(Ord(Ch) - Ord('A') + 1));
    LD:= LD shr 1;
    inc(Ch);
  end;
end;

Un ejemplo de uso:
Código Delphi [-]
var
  TotalSize: UINT64;
begin
  TotalSize:= GetDriveSizeFromVol('c');
  Writeln(TotalSize);
  ReadLn;
end.


Saludos.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
obtener el número de serie de un disco duro serial ATA mgc API de Windows 4 27-03-2009 15:54:18
¿Función para determinar la capacidad del disco duro? Roilo API de Windows 8 30-12-2008 19:07:30
Como obtener el serial del volumen del Disco Duro JoAnCa API de Windows 3 12-10-2007 20:17:17
Componente DiskInfo, para Obtener el Numero de Serie del Disco Duro Alexis De la Cr OOP 3 17-05-2007 23:00:25
Como leer el serial del Disco duro? JuanErasmo C++ Builder 1 30-09-2005 06:34:35


La franja horaria es GMT +2. Ahora son las 15:24:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi