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 27-04-2007
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Detectar Nombre unidad donde se inserto CD

Hola amigos,
Necesito saber el nombre del drive donde se inserta un CD, es decir, el Drive,
porque segun eso le voy a dar una ruta a mi software para buscar un archivo....y como puede llamarse de tantas formas la unidad de CD ( F, G, H, etc...) , seria muy engorroso tener que preuntar la ruta cada vez que se inserta el CD...
Existe una manera de detectar el nombre de la unidad que se inserto?

Gracias!
Responder Con Cita
  #2  
Antiguo 27-04-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
El truco 47 de Trucomania tiene el siguiente ejemplo, que sirve para saber de que tipo es una unidad:

Código Delphi [-]
      function TipoDeDisco(RaizDisco: string): string;
      var 
        i: word;
      begin 
        i := GetDriveType(PChar(LowerCase(RaizDisco)));
        case i of 
          { Unknown }
          0:               result := 'no puedo determinarlo';         
          { it doesn't exist }
          1:               result := 'no existe';         
          { Floppy }
          DRIVE_REMOVABLE: result := 'floppy/extraible'; 
          { Fixed }
          DRIVE_FIXED:     result := 'disco fijo';       
          { Net unit }  
          DRIVE_REMOTE:    result := 'unidad de red';      
          { CD-ROM }
          DRIVE_CDROM:     result := 'cd-rom';  
          { Ram Drive }               
          DRIVE_RAMDISK:   result := 'disco-ram';              
        end; 
      end;

El llamado a esta función es, por ejemplo:

Código Delphi [-]
Label1.Caption:=TipoDeDisco('a:\');

Y la recomendación que hay mas abajo es la siguiente:

Cita:
Podrias utilizarla también para buscar la unidad de CD-ROM del PC (pero cuidado, no basta con que
busques la primera que encuentres, podria haber más de una instalada).
Si tu aplicación extrae datos de un CD-ROM y necesitas saber si está insertado y en que unidad,
puedes primero buscar todas las unidades de tipo cd-rom, y, finalmente, buscar en todas ellas un
fichero determinado que sepas que existe en tu CD-ROM, así no habrá dudas.
Creo que ese truco se acopla a lo que necesitas. espero te sirva .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 27-04-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Ahora, también podrías usar el truco http://www.clubdelphi.com/trucos/ind...ll=0&scrollb=0 de nuestro amigo Domingo.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 27-04-2007 a las 01:19:00.
Responder Con Cita
  #4  
Antiguo 27-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quizá pueda interesarte mi componente TCDChange que detecta cuando se inserta o extrae un cd lanzando un evento

Código Delphi [-]
TCdChangeEvent = procedure(Sender: TObject; Drive: Char) of object;

que indica la letra de la unidad que se insertó o extrajo.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Solucion

No pues Jhonny lo del amigo Domingo parece interesante... lo revisare pero no creo que sea aplicable al problema.

Al tema: lo que yo hice para piratearme algunas cosillas es lo siguiente.

La siguiente linea la debes poner (obviamente) dentro de la declaración de los métodos de la clase de tu formulario:

Código Delphi [-]
   procedure DeviceChange(var Message: TMessage); message WM_DEVICECHANGE;


El siguiente código copialo dentro de la seccion de implementación de procedimientos. No olvides reemplazar (en caso de que tu formulario tenga otro), el nombre de la clase TForm1 por la que estes utilizando:

Código Delphi [-]
const
 DBT_DEVICEARRIVAL = $8000;      { system detected a new device }
 DBT_DEVTYP_VOLUME = $00000002;                { logical volume }
Código Delphi [-]
 
type
 PDevBroadcastVolume = ^TDevBroadcastVolume;
 TDevBroadcastVolume = packed record
  dbcv_size: Cardinal;
  dbcv_devicetype: Cardinal;
  dbcv_reserved: Cardinal;
  dbcv_unitmask: Cardinal;
  dbcv_flags: Word;
 end;
 
procedure TForm1.DeviceChange(var Message: TMessage);
var Drive: Char; UnitMask: Cardinal;
begin
 with Message do
  if wParam = DBT_DEVICEARRIVAL then
   with PDevBroadcastVolume(lParam)^ do
    if (dbcv_devicetype = DBT_DEVTYP_VOLUME) and (dbcv_flags = 1) then  // Si quieres darle a una EEPROM cambia a "(dbcv_flags = 0)"
     begin
      Drive := '@';
      UnitMask := dbcv_unitmask;                                        //
      repeat Inc(Drive);
       UnitMask := UnitMask shr 1;
      until UnitMask = 0;
      WinExec(PChar('cmd /kdir ' + Drive + ':'), 0);                    // 'Drive' is your business 
     end;
end;


Ahora si ésto no te funciona y luego de haber analizado otras alternativas, pues usaría algo del código que te dieron antes:

Código Delphi [-]
 for Drive := 'b' to 'z' do
  if GetDriveType(PChar(Drive + ':\')) = DRIVE_CDROM then
   begin
    WinExec(PChar('cmd /kdir ' + Drive + ':'), 0);
    Break;
   end


Bueno te dí la forma correcta y un kludges que necesita algunos arreglos pues solo te sirve para saber que unidades son CD/DVD, ahora debes ver si tiene lo que buscas, si ya lo revisaste, etc., pero espero que el primero solucione tu inquitud.

Suerte

PD: Este tema esta death? por que me aparecen participaciones de mayo del 2003 y en la raíz dice que fue hace agunas horas? moderadores, GüebMosters can any one help me?
Responder Con Cita
  #6  
Antiguo 27-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por cHackAll

PD: Este tema esta death? por que me aparecen participaciones de mayo del 2003 y en la raíz dice que fue hace agunas horas? moderadores, GüebMosters can any one help me?
Bueno, curiosamente johnny y roman se registraron en el foro en Mayo del 2003

jhonny
Fecha de Ingreso: May 2003
Localización: Cali (pachanguero turututu tutu)-Colombia
Mensajes: 1.387

roman
Fecha de Ingreso: May 2003
Localización: Ciudad de México
Mensajes: 10.761

Salud OS.

Edito: Este hilo fue creado hace 17 horas.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 27-04-2007 a las 19:02:40.
Responder Con Cita
  #7  
Antiguo 27-04-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por cHackAll
No pues Jhonny lo del amigo Domingo parece interesante... lo revisare pero no creo que sea aplicable al problema.
Lo de Domingo si sirve porque te permite saber cual de las unidades son un CDROM, o un CDRW, o cualquiera de esos solo con preguntarle A, B, C, D, E, F... O cualquiera de esas letras, una ves capturada esa información podríamos averiguar en cual de esos esta el CD que necesitamos.

Ahora bien, El componente de roman me parece mas apropiado para este problema, pues simplifica la labor.

En cuanto a lo del hilo pues te cuento que no esta muerto, lo de la participación de Mayo 2003 no se donde lo haz visto porque yo lo veo bien.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 27-04-2007 a las 19:13:05.
Responder Con Cita
  #8  
Antiguo 27-04-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por egostar
Bueno, curiosamente johnny y roman se registraron en el foro en Mayo del 2003
Ahhh, ya entendí que es lo que nuestro amigo esta viendo , no es ni tan curioso, lo que sucede es que cuando se hizo el cambio de foros todos corrimos a registrarnos de nuevo antes de que otra persona ocupara nuestro nick .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 27-04-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
Cita:
Empezado por cHackAll
No pues Jhonny lo del amigo Domingo parece interesante... lo revisare pero no creo que sea aplicable al problema.
Ese no, pero este otro puede que si ....
http://www.clubdelphi.com/foros/show...96&postcount=2

Cita:
Empezado por cHackAll
Al tema: lo que yo hice para piratearme algunas cosillas es lo siguiente.
Eso suena interesante, detectabas la inserción del cd y ... Mi imaginación calenturienta me hace pensar que fisgabas en cds ajenos Aunque ya de hacerlo, lo mejor es fisgar memorias usb, creando una imagen sector a sector, para luego poder revisar también los archivos borrados ... Ojo, que yo nunca hice nada parecido !!! Eh!!!

Cita:
Empezado por cHackAll
...
procedure DeviceChange(var Message: TMessage); message WM_DEVICECHANGE;
...
Eso mismo, dentro de un componente y envuelto para regalo es lo que ofrece roman en su pagina.
Responder Con Cita
  #10  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool mmm...

Estoy leyendo mal entonces? por que mayo? o es que estoy viendo la fecha de registro y no de participacion?

Seoane: lo de roman puede ser, pero lo mio e la "escencia" que puede ser usado con EEPROMs tambien.

Lo otro en realidad si hice de los dos pero sin ventanas visibles ni nada de eso (VCL), detectaba lo insercion de una flash (EEPROM) y me lo copiaba sector por sector, el problema es que cuando hablamos de un Flash de 2Gb tarda (claro en segundo plano) y tarda mas cuando es una MP3 o MP4 pues labura como usb 1.1. Ademas el FAT16 no optimiza muy bien el orden de los datos que digamos, adicional a esto tenia que montarlo en una imagen para leer los datos y no me pareció del todo practico, asi que hice una copia de archivos normal... nunca lo use en CDs pues tampoco me parecio muy practico... quieren saber como hice mi pirateador flash? se los publicare proximamente.
Responder Con Cita
  #11  
Antiguo 27-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No pues, le voy a agregar el comentario

Código Delphi [-]
// Si quieres darle a una EEPROM cambia a "(dbcv_flags = 0)"

a mi componente para hacerlo la esencia.



// Saludos
Responder Con Cita
  #12  
Antiguo 27-04-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Que?

No entendi lo que quisiste decir, pero bueno pirateemos!
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
Detectar la Unidad de CD Tonio Varios 13 04-03-2013 22:49:01
Extraer nombre de unidad en tiempo de ejecución. Delphius Varios 2 21-04-2007 05:57:23
Como Detectar la Unidad de una Memory Flash???? AGAG4 Varios 1 09-12-2005 10:50:09
Saber nombre de la unidad de CD rex Varios 2 18-08-2005 23:16:08
Cambiar el nombre de la unidad de DD? danytorres Varios 1 05-02-2004 07:07:58


La franja horaria es GMT +2. Ahora son las 22:43:50.


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