PDA

Ver la Versión Completa : Detectar memoria USB


LuisAlf::
26-08-2010, 17:03:36
Hola a todos por aquí...

He estado trabajando con una aplicación sencilla, tipo gadget
Y ultimamente decidi que mi aplicación pudiera detectar, cuando una memoria se conectara a la pc...
Estuve experimentando un poco y pues si logre obtenerlo gracias a la validación de la función disksize en un timer de mi programilla...

Pero no me convenció mi método del todo y supongo que habra alguna solución más optima de detectar la unidad nueva que se conecto...

Espero que alguien me pueda ayudar en esto...

Sin más gracias por leer este post...

ecfisa
26-08-2010, 19:17:04
Hola LuisAlf.

Revisá este Link (http://www.delphipages.com/forum/showthread.php?t=203757)


Saludos.

LuisAlf::
26-08-2010, 20:05:04
Interesante....

Creo que mejor me quedo con mi codigo...

jejeje!!!

De todas formas se agradece tu aporte, voy a ver que le puedo entender...

kurono
28-08-2010, 00:33:13
yo utilizo este codigo para tales fines solo debes ajustarlo a tus necesidades

var

Letra: Char;

begin

for Letra:= 'C' to 'Z' do

if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then

begin


ShowMessage('Esto es una memoria usb '+Letra+':\');


end;

end;

ecfisa
28-08-2010, 01:18:24
Hola kurono.

Muy bueno el código... simple y funcional.

Seguro que le servirá a más de uno, empezando por el que escribe... :)

Saludos.

kurono
28-08-2010, 01:27:31
ojala que le sirva tambien a nuestro amigo LuisAlf

LuisAlf::
29-08-2010, 00:27:25
Supongo que si me servira !:P

Gracias... Kurono...

De repente se me vino a la mente uno de tus post donde te da una santa regañada el maestro Delphius (I.A)...

jejeje..

Aqui les dejo la forma en que yo lo hagó dentro de mi aplicación...



procedure TForm1.TimerDetenerTimer(Sender: TObject);
var
tam1:int64;
tam2:int64;
begin
//////////////////////
if abiertos then begin
tam1:=disksize(6);//f:\
tam2:=disksize(5);//e:\

if tam1<>-1 then
ShellExecute(0, 'open', nil, nil, PAnsiChar('f:\'), SW_SHOW);
if(tam2<>-1)and(tam1=-1) then
ShellExecute(0, 'open', nil, nil, PAnsiChar('e:\'), SW_SHOW);
abiertos:=false;
end;
...
................


Algo asi... aunque aqui esta muy especifico el codigo..y eso es lo que no me gustaba...

Gracias de Nuevo..

kurono
29-08-2010, 20:14:54
ahhh jaja ya se me olvidaba esa regañada que delphius me dio y no solamente fue una sino varias cuando eso no tenia tanto tiempo libre como para pensar bien como crear los codigos fuente de mis aplicacion de modo que recurria aqui para resolverlo de rapido y por eso delphius me regañaba de ves en cuando .bueno en cuanto a tu codigo si bien como dices es algo especifico siempre es bueno saber hacer las cosa de varias manera para asi deservolvernos en situaciones diferentes que se nos presentan

Delphius
01-09-2010, 04:01:48
Supongo que si me servira !:P

Gracias... Kurono...

De repente se me vino a la mente uno de tus post donde te da una santa regañada el maestro Delphius (I.A)...

jejeje..



¿Te refieres a éste (http://www.clubdelphi.com/foros/showthread.php?t=57220)? ;)

ahhh jaja ya se me olvidaba esa regañada que delphius me dio y no solamente fue una sino varias cuando eso no tenia tanto tiempo libre como para pensar bien como crear los codigos fuente de mis aplicacion de modo que recurria aqui para resolverlo de rapido y por eso delphius me regañaba de ves en cuando .
¡Te deschabaste! :D Si yo ya sabía que aquí vienen estudiantes bien flojos que prefieren la salida fácil antes que intentarlo y/o sentar el trasero en el asiento y estudiarlo.

Ya ves... otro regaño :p:D.
La cosa es que se intuye cuando un estudiante viene con ganas de aprender y cuando a pedir la tarea. Con el paso del tiempo uno ya los "huele".
Espero que esas reprimendas sirvan de algo kurono.

Esto me confirma que si fuera profesor sería muy insoportable y el más odiado... ¡Tendría bien cortitos y derechitos a mis víctimas... digo estudiantes! :D Lo peor de todo es que muchos me dicen que debería estar en la docencia. :rolleyes:

Saludos,

kurono
01-09-2010, 04:14:07
hola amigo delphius si bien los estudiante o mejor dicho a cualquier persona no le gusta que lo regañen en eso regaño es que estan las enseñanza en mi caso esos regaño me sirvieron de mucho ya que me ayudo a tener mas logica a la hora de programar y me imagino que a muchos miembros de aqui le a pasado lo mismo

LuisAlf::
01-09-2010, 17:52:54
jajaja!

Que feo cuando uno se siente presionado...yo tambien he pasado por esos momentos..gracias a la Escuela...:mad:

santiago14
23-05-2011, 14:17:49
yo utilizo este codigo para tales fines solo debes ajustarlo a tus necesidades

var
Letra: Char;
begin
for Letra:= 'C' to 'Z' do
if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then
begin
ShowMessage('Esto es una memoria usb '+Letra+':\');
end;
end;


Que mas puedo decir, este pedacito de código es una maravilla... mis felicitaciones a su creador; o por lo menos al que lo difundió por la comunidad.
Ahora conecto y desconecto mis dispositivo USB y automáticamente puedo detectar a que unidad fueron asignados... jejeje.

Saludos.

LuisAlf::
23-05-2011, 17:29:53
Ahora conecto y desconecto mis dispositivo USB...


Hola Santiago14...

A mi también me funcionó de maravilla el código...
Aunque me intrigaron tus palabras..heehe.. como es que puedes desconectar los dispositivos USB por medio de código..

Si sabes la respuesta me encantaria saberla.. :D

ecfisa
23-05-2011, 21:28:11
Hola LuisAlf::

En este enlace (http://www.clubdelphi.com/foros/showpost.php?p=380980&postcount=2) está como activar/desactivar los puertos USB.

Saludos.

darkmir
30-04-2013, 01:30:56
var Letra: Char;
begin
for Letra:= 'C' to 'Z' do
if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then
begin
ShowMessage('Esto es una memoria usb '+Letra+':\');
end;
end;
//

como seria en builder c++?

ecfisa
30-04-2013, 04:16:46
Hola darkmir.

Por favor cuando incluyas código en tus mensaje utiliza TAG's para darle más legibilidad:

http://img403.imageshack.us/img403/3461/75416396.jpg


void Show_Usb(TStrings *TS)
{
for(char i = 'A'; i <= 'Z'; i++)
if(GetDriveType(AnsiString((AnsiString)i + ":\\").c_str()) == DRIVE_REMOVABLE)
TS->Add((AnsiString)i + ":\\" + " Es una memoria USB");
}


Llamada ejemplo:
Show_Usb(ListBox1->Items);

Saludos. :)