Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Obtener todas las unidades extraíbles (https://www.clubdelphi.com/foros/showthread.php?t=64499)

Negriz 04-04-2009 04:10:33

Obtener todas las unidades extraíbles [Solucionado]
 
Hola como estan!!! un saludo bien grande a todos los miembros del foro :) hace rato no me pasaba por aca, pero era por que he estado algo ocupado, mucha tarea :)

bueno este es el codigo que tengo:
Código:

  char DriveName[4] = "C:\\";
  for (char Drive = 'C'; Drive <= 'Z'; Drive++)
  {
        DriveName[0] = Drive;
        int tipo = GetDriveType(DriveName);
        if( tipo == 2 )
        {
                ShellExecute(NULL,"open", DriveName,NULL,NULL,SW_SHOW);
        }
  }

Que hace es te codigo?
Ubica todas las unidades extraibles (memoerias USB por decirlo asi) y las abre en el explorador con el comando ShellExecute.
Cual es el problema?
Que en los computadores donde esta instalado un multilector USB (o multilector de tarjetas) me sale el mensaje "inserte un disco en la unidad X:".
Lo que quiero hacer es poder identificar que unidades del multilector tienen o no un memoria USB o SD como sea insertada para solo abrir estas en el explorador...
estube tratando con el comando winexec de esta manera:

Código:

WinExec("cmd /c start X:");
pero el problema es que cuando se ejcuta sobre las unidades del multilector sale un error que dice:
"el dispositivo no esta listo"

en fin, el problema que tengo es poder identificar en que unidades del multilector si hay una meoria insertada....

un saludo y gracias de antemano.

cHackAll 04-04-2009 04:51:50

Código:

char Root[4] = "A:\\";
// SetErrorMode(SEM_FAILCRITICALERRORS);
 for (; Root[0] <= 'Z'; Root[0]++)
 {
  if ((GetDriveType(Root) == DRIVE_REMOVABLE) && SetCurrentDirectory(Root))
  {
  ShellExecute(NULL, "open", Root, NULL, NULL, SW_SHOW);
  }
 }
 SetCurrentDirectory("C:"); //


Negriz 10-04-2009 00:15:10

:) muchas gracias por responder tan pronto [cHackAll], revise el codigo que posteaste:
Código:

char Root[4] = "A:\\";
// SetErrorMode(SEM_FAILCRITICALERRORS);
 for (; Root[0] <= 'Z'; Root[0]++)
 {
  if ((GetDriveType(Root) == DRIVE_REMOVABLE) && SetCurrentDirectory(Root))
  {
  ShellExecute(NULL, "open", Root, NULL, NULL, SW_SHOW);
  }
 }
 SetCurrentDirectory("C:"); //

pero sigo teniendo resultados muy parecidos a lo anterior :(

si ubiera alguna forma de evitar que ese mensaje saliera... :( igual sigo buscando.
Gracias.

cHackAll 10-04-2009 00:47:35

Bueno, dos preguntas la primera intentaste usar el codigo quitandole el comentario a la segunda linea? osea USANDOLA?... y dos; en qué linea te da el error?

Negriz 11-04-2009 00:57:15

Ops :p lo siento es que cuando lo revise lo hize algo apurado :)
jajaja en serio si no me dices nunca li hubiera visto :) muchas gracias
[gracias]

[/gracias]

Negriz 11-04-2009 17:28:10

:D oye cHackAll muchas gracias, era justo lo que necesitaba, ahora se que unidades puedo usar y cuales no :D ha sido de mucha ayuda tu codigo, gracias.


La franja horaria es GMT +2. Ahora son las 22:59:32.

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