FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Nombre de la Unidad activa
Hola a todos, me gustaria saber como puedo obtener el nombre de la unidad activa que en mi caso sera un pendrive. Gracias de antemano.
|
#2
|
||||
|
||||
¿Esto?... o con nombre te refieres a la etiqueta del disco?
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
Si,me refiero a la etiqueta. Imagina que es un pendrive que se llama kingston y aparece como unidad f: seria "f:\Kingston" pues quiero saber como se extrae "Kingston" de la unidad f:. Gracias.
|
#4
|
||||
|
||||
Prueba con esto:
Código:
char Vol[256]; // Aquí se obtendrá el nombre del volumen o etiqueta del disco. GetVolumeInformation(ExtractFileDrive(GetCurrentDir()).c_str(), Vol, 255,0,0,0,0,0); |
#5
|
|||
|
|||
me envia este error:
E2342 Type mismatch in parameter 'lpRootPathName' (wanted 'const char *', got 'wchar_t *') E2034 Cannot convert 'wchar_t *' to 'const char *' |
#6
|
||||
|
||||
¿Que compilador usas?, seguro que B2009 o superior.
Es un error del Unicode. Trata de cambiar c_str() por t_str(): Código:
char Vol[256]; // Aquí se obtendrá el nombre del volumen o etiqueta del disco. GetVolumeInformation(ExtractFileDrive(GetCurrentDir()).t_str(), Vol, 255,0,0,0,0,0); Código:
wchar_t Vol[256]; // Aquí se obtendrá el nombre del volumen o etiqueta del disco. UNICODE WCHAR. GetVolumeInformationW(ExtractFileDrive(GetCurrentDir()).c_str(), Vol, 255,0,0,0,0,0); |
#7
|
|||
|
|||
Si, llevas razon, se trata de rad 2010. ya funciona sin errores. Infinitas gracias.
Saludos a todos. |
#8
|
|||
|
|||
Bueno, pues no salgo de una cuando estoy en otra. Es cierto que funciona y que me da correctamente el nombre de la unidad, pero porque cuando hago una comparacion con un if no reconoce la exactitud del nombre.
Me explico: Label1->caption = Vol (Se visualiza DOWNLOAKEY) ahora if (Vol == "DOWNLOADKEY" ) no reconoce la igualdad. ¿a que se deberá esto?.Gracias. |
#9
|
||||
|
||||
Sigue siendo un problema del unicode. Hazlo así:
Código:
if (Vol == L"DOWNLOADKEY" ) ..... Código:
if (Vol == TEXT("DOWNLOADKEY") ) ..... |
#10
|
|||
|
|||
Nada, no funciona asi, he tenido que hacer esto:
String NombreUnidad = Vol; if (NombreUnidad == "DOWNLOADKEY" ) y ahora funciona pero no se si es lo adecuado. Gracias |
#11
|
||||
|
||||
Con las últimas versiones 2009 y 2010 se ha generado un lío tremendo con el tema del Unicode en las cadenas de texto. La VCL es compatible con Unicode pero no las clásicas funciones de C. Es preferible usar el tipo String que el AnsiString. L seguida de una cadena literal genera ese texto en unicode, así cono TEXT("Mi texto"). Las API terminadas en A son las clásicas no unicode, las terminadas en W trabajan en Unicode (que en el fondo siempre son llamadas por las anteriores)
Lamentablemente no trabajo con estas últimas versiones del Builder y por lo tanto no puedo realizar pruebas. Si tu código funciona, entonces es correcto. Te aconsejo que experimentes de distintas formas y que uses el debug para observar como son las cadenas de texto... Las primeras versiones del B2009 tenían algún bug con el tema del unicode que se arregló mas tarde. Saludos. |
#12
|
||||
|
||||
Otra forma de implementar lo que buscas, es pedirle al shell que nos diga su nombre, a través de IShellFolder Interface:
Código:
#define NO_WIN32_LEAN_AND_MEAN #include <vcl.h> #pragma hdrstop #include <shlobj.h> String GetDriveName(String Drive) { LPSHELLFOLDER Desk; LPITEMIDLIST pidl; STRRET StrRet; String Result = ""; if(SUCCEEDED(SHGetDesktopFolder(&Desk))){ Desk->ParseDisplayName(0, NULL, StringToOleStr(Drive), 0, &pidl, 0); Desk->GetDisplayNameOf(pidl, SHGDN_NORMAL, &StrRet); switch(StrRet.uType) { case STRRET_WSTR: Result = StrRet.pOleStr; break; case STRRET_OFFSET: Result = (char*)pidl + StrRet.uOffset; break; case STRRET_CSTR: Result = StrRet.cStr; break; } Desk->Release(); } return Result; } Código:
String Name = GetDriveName("C:\\"); Última edición por escafandra fecha: 15-07-2010 a las 15:13:48. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Detectar Nombre unidad donde se inserto CD | JuanErasmo | API de Windows | 11 | 27-04-2007 22:09:20 |
Averiguar nombre de unidad para la sección uses | akinom38 | Varios | 6 | 19-01-2006 17:26:02 |
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 |
Conocer el nombre de la aplicacion que se encuentra activa | cso2000 | Varios | 4 | 24-10-2003 02:28:14 |
|