Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   Acceso directo a plantilla de Word (https://www.clubdelphi.com/foros/showthread.php?t=60625)

roman 08-10-2008 01:52:21

Acceso directo a plantilla de Word
 
Hola,

Pues eso, lo que quiero es crear un acceso directo a una plantilla de Word, pero no para crear un documento basado en ella sino para editar la plantilla en sí.

El problema es que la acción por defecto al "ejecutar" un .DOT es crear un documento, y, si queremos editar la plantilla, debemos seleccionar la opción "Abrir" del menú contextual.

Una forma de hacer esto sería poniendo

"C:\ruta\a\winword.exe" /open "C:\ruta\a\la\plantilla.dot"

en el acceso directo. Pero el problema es que yo quiero crear este acceso directo con Inno Setup para la instalación de un programa, y no sé de antemano, cual sea la ruta a winword.exe. Si no le pongo ruta, sino sólo winword.exe, no funciona.

Intenté poniendo

"C:\ruta\a\la\plantilla.dot" /open

en el acceso directo pero no funciona tampoco.

// Saludos

egostar 08-10-2008 02:20:26

Hola

Inno Setup te permite ejecutar codigo delphi por lo que habría que crear una funcion que nos retorne la ruta de Winword.

Algo mas o menos así

Código Delphi [-]
[code]
function GetPathWindWord: String;
var
   PrevPath: String;
begin
   PrevPath := '';
   if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot', 'Path', PrevPath) then begin
      Result := '';
   end
   else Result := PrevPath;
end;

Salud OS

roman 08-10-2008 02:29:03

Mmm, pudiera ser Eliseo, pero creo que ahí dependo de la versión exacta del Office que esté instalado ¿no?

Tengo la idea de que puede usarse algo como RunDLL32 Shell32 para abrir documentos al estilo de ShellExecute, pero hasta ahora sólo he logrado poner

rundll32.exe shell32.dll, ShellExec_RunDLL "C:\ruta\a\la\plantilla.dot"

lo cual abre un nuevo documento basado en la plantilla, pero no logro acomodarle el open.

Gracias Eliseo.

// Saludos

egostar 08-10-2008 02:38:57

Cita:

Empezado por roman (Mensaje 318842)
Mmm, pudiera ser Eliseo, pero creo que ahí dependo de la versión exacta del Office que esté instalado ¿no?

Tengo la idea de que puede usarse algo como RunDLL32 Shell32 para abrir documentos al estilo de ShellExecute, pero hasta ahora sólo he logrado poner

rundll32.exe shell32.dll, ShellExec_RunDLL "C:\ruta\a\la\plantilla.dot"

lo cual abre un nuevo documento basado en la plantilla, pero no logro acomodarle el open.

Gracias Eliseo.

// Saludos

Cierto, ese si es un problema.

Tal vez algo asi

Código Delphi [-]
[Run]
Filename: {sys}\rundll32.exe; Parameters: "C:\ruta\a\la\plantilla.dot"; WorkingDir: {app};

Salud OS

cHackAll 08-10-2008 02:54:34

Yo me voy por la primera solucion;

Código:

HKEY_CLASSES_ROOT\Word.Application\CurVer
Lo obvio; obtenemos la version del Word, y concatenamos su parte numerica con la clave mostrada por eliseo.

Saludos

roman 08-10-2008 03:00:36

¡Ah! Muy bien :), voy a intentarlo y les cuento.

Gracias

// Saludos

egostar 08-10-2008 03:15:59

Cita:

Empezado por roman (Mensaje 318848)
¡Ah! Muy bien :), voy a intentarlo y les cuento.

Gracias

// Saludos

Solo una modificación que ya probe y abre Word

Código Delphi [-]
[code]
function GetPath(Param:String): String;
var
  PrevPath: String;
begin
  PrevPath := '';
  if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Office\11.0\Word\InstallRoot', 'Path', PrevPath) then begin //Aqui modifique la clave 
     Result := '';
  end
  else Result := PrevPath;
end;

[Run]
Filename: "{code:GetPath|''}\WINWORD.EXE"; Parameters: "" //Aqui me falta la parte del dot que no encontre donde estan :(

Salud OS

Caral 08-10-2008 03:24:01

Hola
Pregunto>
Este hilo no se podría poner con alguna etiqueta?.
Es que ver que Roman tenga una duda o que incluso pregunte es de verse.:):D
Hay que enmarcar este hilo.:D:D
Saludos Maestros.

egostar 08-10-2008 03:33:49

Hola

Tal vez esto sea mejor.

Código Delphi [-]
[code]
function Ejecuta(Param:String): String;
var
  ErrorCode: Integer;
begin
  if not ShellExec('', ExpandConstant('C:\Documents and Settings\ctoomer\Application Data\Microsoft\Word\Qué queremos evaluar.doc'),
     '', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
  begin
    Result := inttostr(ErrorCode);
  end;
end;

[Run]
FileName: "{code:Ejecuta|''}"

Tiene un pequeño detalle al final que es cosa de ver con calma, pero de que abre el archivo, lo abre :)

Salud OS

PD, Ah que mi amigo Caral :D:D:D

roman 08-10-2008 03:40:46

Ha quedado así

Código Delphi [-]
function GetWordVersion(): String;
var
  PrevVersion: String;

begin
 PrevVersion := '';

 if not RegQueryStringValue(HKCR, 'Word.Application\CurVer', '', PrevVersion) then
  begin
    Result := '';
  end
  else
    Result := Copy(ExtractFileExt(PrevVersion), 2, MaxInt) + '.0';
end;

function GetWordPath(Param: string): String;
var
  PrevPath: String;
   
begin
 PrevPath := '';
   
 if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Office\' + GetWordVersion() + '\Common\InstallRoot', 'Path', PrevPath) then
  begin
    Result := '';
  end
  else
    Result := PrevPath;
end;

Muchas gracias.

Eliseo, lo último que pones no lo entiendo. Serviría para abrir el archivo desde el instalador, pero lo que necesito es crear un acceso directo, ¿o entiendo mal?

// Saludos

egostar 08-10-2008 03:43:56

Cita:

Empezado por roman (Mensaje 318853)
Eliseo, lo último que pones no lo entiendo. Serviría para abrir el archivo desde el instalador, pero lo que necesito es crear un acceso directo, ¿o entiendo mal?

El que ha entendido mal soy yo, estaba metido con que querias abrir un documento :o

Lo importante que ya funcionó como lo requerias. :)

Salud OS

maeyanes 08-10-2008 15:58:16

Hola...

roman, ¿checaste la clave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe?

Esa clave, en su valor predeterminado, guarda la ruta completa de WinWord.exe, sea la versión que sea la que tengas instalada. Esa es la clave que usa el comando Ejecutar... (Menu Inicio - Ejecutar...) cuando escribes algo como: Winword o Regedit...

También puedes encontrar en el valor Path la ruta en la que se encuentra instalado.


Saludos...

roman 08-10-2008 16:57:45

Marcos, muchas gracias, así queda todavía más fácil :)

// Saludos

roman 08-10-2008 18:05:00

Con la sugerencia de maeyanes ha quedado así:

Código Delphi [-]
function WinWordPath(Param: String): String;
begin
  if not RegQueryStringValue(
    HKLM,
    'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe',
    '',
    Result)
  then
    Result := '';
end;

Y la creación del icono así:

Código:

Name: "{group}\Modificar plantilla"; FileName: "{code:WinWordPath}"; Parameters: """{app}\plantillas\plantilla.dot""";
Por si hiciera falta, nótense las dobles dobles comillas en Parameters.

De nuevo, muchas gracias a todos.

// Saludos

egostar 08-10-2008 18:25:54

Pues ya quedo redondito este asunto, quedo muy optimizado el código amigo roman.

Cabe mencionar que a mi también me ha servido porque tenia en mente hacer algo que esto que se ha hecho me ha aclarado la idea :)

Salud OS

roman 08-10-2008 22:00:27

Pues vaya, ha resultado ser aún más fácil. Nos olvidamos del código y usamos las constantes {reg: } que para eso están :D

Código:

Name: "{group}\Modificar plantilla"; FileName: "{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe,}"; Parameters: """{app}\plantillas\plantilla.dot""";
// Saludos

egostar 08-10-2008 22:22:03

Cita:

Empezado por roman (Mensaje 319019)
Pues vaya, ha resultado ser aún más fácil. Nos olvidamos del código y usamos las constantes {reg: } que para eso están :D

No pues cuando se trata de optimizar código, lo mejor es eliminarlo :D:D:D

Muy bien :)

Salud OS


La franja horaria es GMT +2. Ahora son las 00:41:06.

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