PDA

Ver la Versión Completa : La función ParamStr


soul6301
13-06-2004, 21:57:55
Hola:

Quisiera por favor obtener ayuda acerca de tres preguntas que tengo:

1) Cuando abro mi programa desde un archivo asociado, la función ParamStr(1) me da el nombre de aquel archivo pero en su modo de nombre de archivo corto. Es decir, si el archivo se llama "Texto básico.txt" y se ubica en "C:\Mis Documentos", la cadena que obtengo de ParamStr(1) es "C:\MISDOC~1\TEXTOB~.TXT". ¿Cómo logro para obtener el nombre del archivo de tipo nombre largo: "C:\Mis Documentos\Texto básico.txt"?

2) Entiendo que cuando abro un programa con un archivo asociado, el parámetro se llena con el nombre del archivo. ¿Siempre a este parámetro le corresponde este valor? ¿Pueden los parámetros contener otras palabras, por ejemplo "proceso"?

3) ¿Pueden estos parámetros ser cambiados durante el modo de ejecución? ¿Puedo cambiar los parámetros de otro programa que también está en modo de ejecución?

Sé que estas tres preguntas tienen respuestas muy diferentes, pero no quería ponerlas en tres hilos porque relativamente hablan de la misma función.

Gracias de antemano por su ayuda.

Combat-F2D
13-06-2004, 22:50:28
sacado de la ayuda de delphi

Note: Use double quotes to wrap multiple words as one parameter (such as long file names containing spaces).

por si de algo sirve

soul6301
14-06-2004, 02:44:31
Hola:

Sí leí ese texto en la ayuda de Delphi. Dice que use doble comillas para obtener el archivo de tipo largo... pero cómo las uso. ¿Así?: ''paramstr(1)''... Eso es simplemente ilógico. ¿Alguien tiene idea de dónde poner esas dobles comillas?

Gracias

soul6301
14-06-2004, 02:45:25
Quizá esté traduciendo mal y no son comillas a lo que se refiere. Disculpen si lo estoy haciendo mal. Gracias.

Lepe
14-06-2004, 14:21:08
El tema es que se puede mandar archivo con formato de nombres largos en linea de comando, pero encerrado en doble comillas. Por tanto sería al tiempo de dar la linea de comandos, no al recibirla.

Si ya lo has recibido como nombre corto, entoces colega:

The GetFullPathName function retrieves the full path and filename of a specified file.

DWORD GetFullPathName(

LPCTSTR lpFileName, // address of name of file to find path for
DWORD nBufferLength, // size, in characters, of path buffer
LPTSTR lpBuffer, // address of path buffer
LPTSTR *lpFilePart // address of filename in path
);


Parameters

lpFileName

Points to a null-terminated string that specifies a valid filename. This string can use either short (the 8.3 form) or long filenames.

nBufferLength

Specifies the size, in characters, of the buffer for the drive and path.

lpBuffer

Points to a buffer that contains the null-terminated string for the name of the drive and path.

lpFilePart

Points to a variable that receives the address (in lpBuffer) of the final filename component in the path. This filename component is the long filename, if any, rather than the 8.3 form of the filename.

usa esto sacado de la Win32 Developer's guide, y por supuesto, su omónimo:


The GetShortPathName function obtains the short path form of a specified input path.

DWORD GetShortPathName(

LPCTSTR lpszLongPath, // points to a null-terminated path string
LPTSTR lpszShortPath, // points to a buffer to receive the null-terminated short form of the path
DWORD cchBuffer // specifies the size of the buffer pointed to by lpszShortPath
);


Parameters

lpszLongPath

Points to a null-terminated path string. The function obtains the short form of this path.

lpszShortPath

Points to a buffer to receive the null-terminated short form of the path specified by lpszLongPath.

cchBuffer

Specifies the size, in characters, of the buffer pointed to by lpszShortPath.


Saludos

soul6301
14-06-2004, 15:57:08
Vaya! Entonces había entendido mal la ayuda. Gracias por el resto de la información, de seguro será útil.

delphi.com.ar
14-06-2004, 16:00:58
Solo quiero comentarte que las funciones ExpandFileName y ExtractShortPathName de las SysUtils cumplen estas funciones (no hacen otra cosa que llamar a la WinApi).

Saludos!