Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ShellExecute y PChar "Truncador" (https://www.clubdelphi.com/foros/showthread.php?t=65797)

Cabanyaler 13-01-2010 17:41:55

ShellExecute y PChar "Truncador"
 
Hola, intento ejecutar una determinada aplicación (entiendase Excel, acrobat reader, word, ...) y que abra un determinado documento asociado a esa aplicación (entiendase Excel, acrobat reader, word, ...) .

Con la siguiente función 'BuscaEjecutable' obtengo el archivo ejecutable asociado al fichero con su ruta completa.
P.e. si Fichero es la cadena 'nomarchivo.doc' me devuelve el valor: 'C:\Archivos de programa\Microsoft Office\Office\WINDWORD.EXE'

Código Delphi [-]
function TFDocAsoLuminaria.BuscaEjecutable(Fichero:string):String;
var
    Ejecutable:Pchar;
 begin
    GetMem(Ejecutable,200);
    FindExecutable(Pchar(Fichero),nil,Ejecutable);
    Result:=String(Ejecutable);
    FreeMem(Ejecutable,200);
end;

Se supone pues que teniendo el archivo que quiero abrir (en este caso de ejemplo de tipo doc asociado a word de office 'nomarchivo.doc') y por otro lado tengo la ruta completa de donde se encuentra el ejecutable que hace posible la visualización del Fichero 'C:\Archivos de programa\Microsoft Office\Office\WINDWORD.EXE', con la siguiente instrucción me abre el word con el documento

Código Delphi [-]
      PathExe := BuscaEjecutable(DMGIS.ADOQ_DocLuminariaRuta.value);   // Traure el ejecutable associat al'extensió del fitxer
      ShellExecute(0, 'open', PChar(PathExe), PChar(fichero_w), nil, SW_SHOW);    // Ejecutar el exe associat amb el fitxer per obrir-lo

Pero.......
Problema: Si en lugar de llamarse el fichero 'nomarchivo.doc', se llama 'nom archivo.doc' (es decir tiene espacios en blanco), me corta el nombre (y solo me pasa con los que tienen extensión doc. Con las demás naturalezas de fichero funciona aunque tenga estos espacios en blanco en su nombre.) y me lo deja como nom.doc y claro no se abre pq no lo encuentra.
:confused:

Pregunta: ¿Alguien sabe como puedo pasar ese parametro que debe ser de tipo pointer, a partir de una cadena String sin que se me trunque de ese modo?

Gracias, gracias

droguerman 13-01-2010 18:10:20

reemplaza nom archivo.doc por "nom archivo.doc", es muy sencillo

Cabanyaler 13-01-2010 18:21:48

Cita:

Empezado por droguerman (Mensaje 350655)
reemplaza nom archivo.doc por "nom archivo.doc", es muy sencillo

Comorrrr??? :eek:

Neftali [Germán.Estévez] 13-01-2010 19:53:40

Creo que quiere decir que pruebes a pasar el nombre del fichero incluyendo dobles comillas:

Código Delphi [-]
 
// Algo así
ShellExecute(0, 'open', PChar(PathExe), PChar('"' + fichero_w + '"'), nil, SW_SHOW);
// O mejos esta
ShellExecute(0, 'open', PChar(PathExe), PChar(QuotedStr(fichero_w)), nil, SW_SHOW);

droguerman 13-01-2010 22:38:55

Cita:

Empezado por Neftali (Mensaje 350679)
Creo que quiere decir que pruebes a pasar el nombre del fichero incluyendo dobles comillas:

Código Delphi [-]
 
// Algo así
ShellExecute(0, 'open', PChar(PathExe), PChar('"' + fichero_w + '"'), nil, SW_SHOW);
// O mejos esta
ShellExecute(0, 'open', PChar(PathExe), PChar(QuotedStr(fichero_w)), nil, SW_SHOW);

Dudo que funcione con quotedStr, hay que usar comillas dobles

Cabanyaler 14-01-2010 08:38:42

Código Delphi [-]
ShellExecute(0, 'open', PChar(PathExe), PChar('"' + fichero_w + '"'), nil, SW_SHOW);

:p:D:D:D

Correcto.
Gracias, muchas gracias.

Neftali [Germán.Estévez] 14-01-2010 11:30:06

Cita:

Empezado por droguerman (Mensaje 350691)
Dudo que funcione con quotedStr, hay que usar comillas dobles

Cierto,... despiste mío :eek::eek::eek::eek:


La franja horaria es GMT +2. Ahora son las 19:56:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi