Página 1 de 1

Letra asignada al insertar un pen drive

Publicado: Jue May 15, 2014 11:21 pm
por Rich
Amigos del foro:
Les pido su ayuda para resolver lo siguiente: Necesito saber desde mi aplicación en Xailer que letra le fue asignada al insertar un pen drive cuyo volumen es F8A2-CBAF. Desde la aplicación lo pedo ver claramente en una ventana en modo consola con la siguiente instrucción:
x := WinExec( 'usb.bat' )
Donde usb.bat es el siguiente archivo de lotes:
@echo off
setlocal
set wmi='wmic logicaldisk where "volumeserialnumber='F8A2CBAF'" get caption'
for /f "skip=1 delims=" %%A in (%wmi%) do (
for /f "tokens=1 delims=:" %%B in ("%%A") do (set drive=%%B)
)
echo %drive%
pause
La ayuda que les pido se refiere a cómo hacer para que el valor de %drive% pueda ser capturado en una variable dentro de la aplicación.

Letra asignada al insertar un pen drive

Publicado: Lun May 19, 2014 12:54 pm
por hgarciaj
Se me ocurren dos soluciones:
1 antes de ejecutar tu programa ejecuta el bat y dentro del bat ejecuta el programa con el parámetro %drive%
2. Si ejecutas el bat dentro del programa entonces graba %drive% en un archivo ini y desde tu programa consulta el valor de dicho archivo

Letra asignada al insertar un pen drive

Publicado: Mié May 21, 2014 4:55 pm
por Rich
Buena idea Hgarciaj, la pondré en práctica.
Gracias por responder.

Letra asignada al insertar un pen drive

Publicado: Jue May 22, 2014 9:50 am
por joselalinf
Sergio,
con la función GetDrives (la tienes en la ayuda) y GetVolumeInformation()
del API puedes hacerlo. No lo he probado a fondo pero así­ deberí­a funcionar
sin necesidad de usar comandos externos:
LOCAL cDrive
LOCAL cSerie
LOCAL aDrives := GetDrives( 2 ) // Lista de unidades removibles
FOR EACH cDrive IN aDrives
cSerie := GetVolumeInfo( cDrive + "" )
IF cSerir == "ElQueBuscas"
MsgInfo( "Unidad: " + cDrive + " Serie: " + cSerie )
ENDIF
NEXT
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
//---------------------------------------------------------- ----------------
HB_FUNC( GETVOLUMEINFO )
{
const char * cDrive = hb_parc( 1 );
char szName[15];
DWORD dwSerial;
DWORD dwMaxComp;
DWORD dwFlags;
char szFileSys[10];
memset( szName, 0, sizeof( szName ) );
memset( szFileSys, 0, sizeof( szFileSys ) );
if( GetVolumeInformation( cDrive, szName, sizeof( szName ) ,
&dwSerial, &dwMaxComp, &dwFlags,
szFileSys, sizeof( szFileSys ) ) )
{
//hb_retnl( dwSerial ); // Si lo quieres devolver numérico
hb_retc( hb_strupr( X2Hex( dwSerial, 4 ) ) );
}
else
{
hb_retc( "" );
}
}
//---------------------------------------------------------- ----------------
#pragma ENDDUMP
Saludos,
José Lalí­n

Letra asignada al insertar un pen drive

Publicado: Jue May 22, 2014 7:14 pm
por Rich
Gracias José.
Esta solución es más robusta, la pondré en funcionamiento de inmediato.