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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Sobre cierto resultado de la función SHGetSpecialFolderPath

Hola,

A raíz de este hilo me he propuesto realizar una sencilla clase que cuenta solo con un método cuyo cometido es devolver la ruta de un directorio "especial" de Windows determinado, como puedan ser los directorios "Mis documentos", "Mi música", etcétera.

Para ello, principalmente, hago uso de la función del API de Windows "SHGetSpecialFolderPath" (más información sobre ella en el hilo citado arriba).

Es el caso que prácticamente he concluído dicha sencilla clase (o al menos me lo creo) pero encuentro un problema con el resultado de la referida función: este es... cómo lo diría... incorrecto, en cierto modo. No el esperado en cualquier caso.

Por ejemplo, si primero trato de hallar la ruta de un directorio y acto seguido compruebo la existencia del mismo el resultado es correcto, puesto que, efectivamante, el directorio cuya existencia se comprueba existe: así me lo indica la función "DirectoryExists" que utilizo para tal fin.

Sin embargo, si lo que pretendo es añadir a la ruta del directorio obtenido alguna cadena,... aun cuando realizo la concatenación de la ruta y la cadena y el compilador no se queja de nada lo que obtengo al cabo es la ruta del directorio, pero sin la cadena unida a la misma.

Supóngase que quiere crearse un directorio en donde está instalado Windows. Entonces pretendo hacer algo así:

Código Delphi [-]
 // Implementación de la función que uso para ello
 class function TDirectoriosWindows.RutaDirectorio(const
   directorio: TDirWin; crear: boolean) : string;
 begin
   SetLength(Result, MAX_PATH);
   SHGetSpecialFolderPath(GetCurrentProcess, PChar(Result),
     NumeroDirectorio(directorio), crear);
 end;
 
 // La cual puedo llamar de esta manera:
 (...)
 var
   s: string;
 begin
   s := TDirectoriosWindows.RutaDirectorio(dew_DirectorioWindows, false);
   // ... para a continuación...
   s := s +'\'+ otroDirectorio;
   ShowMessage(s);
 end;

He omitido algunas cuestiones, pero, creo que puede entenderse si digo que el "ShowMessage" me devuelve "C:\Windows",... y ni rastro de "\otroDirectorio".

Llama la atención el "ShowMessage", puesto que muestre la ruta "C:\Windows", tal como se espera, pero, con lo que parece un buen número de espacios en blanco a la derecha de dicha ruta... de tal manera que el "ShowMessage" se sale de la pantalla, ni más ni menos.

Traté de pasar el resultado/la ruta por "TrimRight", pero, esto no funciona. Y, si en lugar de mostrar la ruta en un "ShowMessage" la añado a una línea de un "TMemo" en esta no sobran caracteres, no hay caracteres en blanco, puede verse, en este caso "C:\Windows", sin más...

¿Cómo es posible esto? Creo que tendrá que ver con cómo trabajo con la función "SHGetSpecialFolderPath", concretamente con la instrucción "SetLength(Result, MAX_PATH);" que puede verse más arriba.

Sin embargo, recurro a vuestra ayuda, a ver si podéis orientarme, como estoy seguro de que así será. Adjunto la unidad en la que implemento la sencilla clase "TDirectoriosWindows".

Si en algo no me he explicado, pues me lo hacéis saber y trato de hacerlo de buena gana. Muchas gracias de antemano por vuestra ayuda.
Archivos Adjuntos
Tipo de Archivo: zip DirectoriosWindows.zip (1,8 KB, 53 visitas)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 10:31:47.


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