Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-10-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
como modificar este codigo

hola amigos del foro me gustaria modificar este codigo q le muestro pues se trata de un codigo que hiso nuestro amigo hackall en donde el muestra como identificar sectores dañado de un disco pues bien el codigo funciona de maravilla pero el incombeniente es que la unidad a comprobar estaria por defecto al ejecutarse y me gustaria poder elegir una unidad para comprobar pues ni mas ni menos le muestro el codigo


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 
var
 hDevice, Dummy, Sectors, Sector: Cardinal;
 Buffer: array [0..$FFFF] of Byte;
 Geometry: record
  Cylinders: Int64;
  MediaType,
  TracksPerCylinder,
  SectorsPerTrack,
  BytesPerSector: Cardinal;
 end;
 
begin
 SetErrorMode(SEM_FAILCRITICALERRORS);
 hDevice := CreateFile('\\.\g:', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hDevice <> INVALID_HANDLE_VALUE then
  begin
   DeviceIoControl(hDevice, $70000{IOCTL_DISK_GET_DRIVE_GEOMETRY}, nil, 0, @Geometry, SizeOf(Geometry), Dummy, nil);
   Sectors := Geometry.SectorsPerTrack * Geometry.TracksPerCylinder * Geometry.Cylinders;
   for Sector := 0 to Sectors - 1 do
    begin
     Label1.Caption := 'Leyendo el sector #' + IntToStr(Sector) + '...';
     Application.ProcessMessages; // Use a thread !!!
     if not ReadFile(hDevice, Buffer, Geometry.BytesPerSector, Dummy, nil) then
      ShowMessage('El sector #' + IntToStr(Sector) + ' esta dañado !');
    end;
   CloseHandle(hDevice);
  end;
end;
end.

Última edición por kurono fecha: 16-10-2008 a las 01:44:40.
Responder Con Cita
  #2  
Antiguo 16-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Bueno, parece ser que lo unico que deberias hacer es cambiar la g: por la unidad en cuestion no? cambia la str a la que quieras y ya esta
Responder Con Cita
  #3  
Antiguo 16-10-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
me disculpo si no me explique bien lo que quiero hacer es poder cambiar la unidad a comprobar en modo de ejecucion
Responder Con Cita
  #4  
Antiguo 16-10-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por kurono Ver Mensaje
me disculpo si no me explique bien lo que quiero hacer es poder cambiar la unidad a comprobar en modo de ejecucion
Hola kurono

Pues es exactamente lo que te comento coso, debes de reemplazar la unidad con una variable, no es mal rollo pero en un poco mas de año que llevas inscrito en el club ya deberias de tener claro como incluir variables en una cadena.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 17-10-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
ok es verdad disculpa mi inorancia eso mismo hare luego les cuento
Responder Con Cita
  #6  
Antiguo 17-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
disculpas aceptadas
Responder Con Cita
  #7  
Antiguo 18-10-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
si quieres cambiarlo en tiempo de ejecucion podria ser así una funcion:

Código Delphi [-]
function verifica(Unidad: Char): PAnsiChar;
var
 hDevice, Dummy, Sectors, Sector: Cardinal;
 Buffer: array [0..$FFFF] of Byte;
 Geometry: record
  Cylinders: Int64;
  MediaType,
  TracksPerCylinder,
  SectorsPerTrack,
  BytesPerSector: Cardinal;
 end;

begin
 SetErrorMode(SEM_FAILCRITICALERRORS);
 hDevice := CreateFile(PChar('\\.\'+Unidad+':'), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hDevice <> INVALID_HANDLE_VALUE then
  begin
   DeviceIoControl(hDevice, $70000{IOCTL_DISK_GET_DRIVE_GEOMETRY}, nil, 0, @Geometry, SizeOf(Geometry), Dummy, nil);
   Sectors := Geometry.SectorsPerTrack * Geometry.TracksPerCylinder * Geometry.Cylinders;
   for Sector := 0 to Sectors - 1 do
    begin
     Form1.Label1.Caption := 'Leyendo el sector #' + IntToStr(Sector) + '...';
     Application.ProcessMessages; // Use a thread !!!
     if not ReadFile(hDevice, Buffer, Geometry.BytesPerSector, Dummy, nil) then
      ShowMessage('El sector #' + IntToStr(Sector) + ' esta dañado !');
    end;
   CloseHandle(hDevice);
  end;
end;

Para usarlo:

Código Delphi [-]
Verifica('C');

bueno espero poder ayudar, este codigo esta creado sin comprobarse...



54LU2

Última edición por cmm07 fecha: 18-10-2008 a las 01:10:50.
Responder Con Cita
  #8  
Antiguo 18-10-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
Gracia amigo cmm07 por tu ayuda pues el codigo ya me funciona aunque me daba error al principio pero ya lo resolvi pues en la linea de la funcion en ves de declararlo como char yPAnsiChar lo declare como string y con eso ya me funciona perfectamente gracia
Responder Con Cita
  #9  
Antiguo 19-10-2008
User_Baja_2 User_Baja_2 is offline
Miembro
 
Registrado: may 2003
Posts: 126
Poder: 21
User_Baja_2 Va por buen camino
componente

Otra idea,

Si quieres, para que quede un poco mejor, en tiempo de ejecucción en el formulario puedes poner el componente: TDriveComboBox y cargar la variable del código que hay en el post anterior con la unidad que quede marcada aqui y el aspecto quedará mejor :-)

Un saludo

Nuppy
Responder Con Cita
  #10  
Antiguo 19-10-2008
Avatar de kurono
[kurono] kurono is offline
Miembro Premium
 
Registrado: jul 2007
Ubicación: Republica Dominicana
Posts: 1.126
Poder: 18
kurono Va por buen camino
ok 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
ayuda con este codigo kurono Varios 4 13-06-2008 01:03:29
como asignarle los componente dialogs a este codigo kurono Varios 4 12-04-2008 08:36:07
como mejorar este codigo... sumando campos Goyo Varios 3 19-05-2007 00:07:18
Que significa este codigo? D-MO PHP 14 23-01-2006 10:08:21
Como Modificar Campo De Tabla Dbf Por Codigo???? AGAG4 Varios 6 10-01-2005 18:03:58


La franja horaria es GMT +2. Ahora son las 07:26:43.


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