Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Saber ruta de un exe (https://www.clubdelphi.com/foros/showthread.php?t=93737)

mblascog 07-02-2019 00:25:19

Saber ruta de un exe
 
Buenas, he creado una simple aplicación para que abra un fichero dwg con edrawings.
Todos los usuarios tienen instalado este programa, pero por los motivos que sean, no todos están en la misma ruta.
Existe la manera de saber la ruta de un programa, no sé cómo lo hace cortana, o bien tengo que leer el registro?

Muchas gracias

newtron 07-02-2019 09:25:16

Si tienes asociado en windows el archivo con el programa que lo abre solo tienes que usar la función "ShellExecute" para abrir el archivo con el programa predeterminado esté donde esté.


p.e.


Código Delphi [-]
    ShellExecute(Handle, 'open', PChar(Archivo), '', '', SW_SHOW);


Saludos

mblascog 07-02-2019 10:55:38

Ohhh!!! muchas gracias Newton, cuando llegue a casa lo pruebo y te digo qué tal!!!

mblascog 09-02-2019 15:15:02

Gracias Newton, no siempre el visualizador es el programa predeterminado, en algunos usuarios sí, en otros no. Y no es por capricho, los diseñadores les interesa ir al explorador de archivos y con doble click abrir directamente el Autocad. Abren muchos ficheros al día y sería fastidiarles si cada vez tuvieran que ir botón derecho - abrir con
Por lo tanto, si alguien sabe cómo buscar el programa en el pc y ejecutarlo.

Casimiro Notevi 09-02-2019 17:29:03

Lo que has preguntado es lo que te han respondido.
Lo que dices del explorador de windows no tiene nada que ver con el programa que tú has hecho.
Así que tendrás que aclararnos exactamente qué es lo que quieres.

MAXIUM 09-02-2019 18:15:50


mblascog 09-02-2019 18:44:49

Buenas, quizás no me he explicado, pero la respuesta no responde a mi pregunta.

Yo quiero que mi programita Delphi abra el fichero dwg con el programa edrawings, y no con otro

Este código:
[delphi]
ShellExecute(Handle, 'open', PChar(Archivo), '', '', SW_SHOW);/DELPHI]
abre el archivo dwg con el programa predeterminado, y yo necesito que sea el edrawings.

Antes, he intentado explicar porqué unos usuarios tienen edrawings como visualizador predeterminado y otros no.
La explicación que he dado antes, es que los diseñadores de la empresa, abren muchos ficheros dwg durante la jornada, y lo hacen desde el explorador de las Windows, con doble clic, y se abre Autocad, que lo tiebe como predeterminado.

Por lo tanto, como puedo ejecutar edrawings, desde Delphi, sin saber la ruta exacta donde se encuentra (dependiendo de los programas que tengas instalados, se encuentra en una ruta o otra)
Espero haberme explicado bien

Muchas gracias

look 09-02-2019 18:54:07

Cita:

Empezado por mblascog (Mensaje 530602)
Buenas, quizás no me he explicado, pero la respuesta no responde a mi pregunta.

Yo quiero que mi programita Delphi abra el fichero dwg con el programa edrawings, y no con otro

Este código:
[delphi]
ShellExecute(Handle, 'open', PChar(Archivo), '', '', SW_SHOW);/DELPHI]
abre el archivo dwg con el programa predeterminado, y yo necesito que sea el edrawings.

Antes, he intentado explicar porqué unos usuarios tienen edrawings como visualizador predeterminado y otros no.
La explicación que he dado antes, es que los diseñadores de la empresa, abren muchos ficheros dwg durante la jornada, y lo hacen desde el explorador de las Windows, con doble clic, y se abre Autocad, que lo tiebe como predeterminado.

Por lo tanto, como puedo ejecutar edrawings, desde Delphi, sin saber la ruta exacta donde se encuentra (dependiendo de los programas que tengas instalados, se encuentra en una ruta o otra)
Espero haberme explicado bien

Muchas gracias


Código Delphi [-]

ShellExecute(Handle, nil, PChar('dwg.exe'),  PChar(Archivo) ,  nil, SW_SHOWNORMAL)

MAXIUM 09-02-2019 19:48:24

Cita:

Empezado por mblascog (Mensaje 530602)
Buenas, quizás no me he explicado, pero la respuesta no responde a mi pregunta.

Yo quiero que mi programita Delphi abra el fichero dwg con el programa edrawings, y no con otro

Este código:
[delphi]
ShellExecute(Handle, 'open', PChar(Archivo), '', '', SW_SHOW);/DELPHI]
abre el archivo dwg con el programa predeterminado, y yo necesito que sea el edrawings.

Antes, he intentado explicar porqué unos usuarios tienen edrawings como visualizador predeterminado y otros no.
La explicación que he dado antes, es que los diseñadores de la empresa, abren muchos ficheros dwg durante la jornada, y lo hacen desde el explorador de las Windows, con doble clic, y se abre Autocad, que lo tiebe como predeterminado.

Por lo tanto, como puedo ejecutar edrawings, desde Delphi, sin saber la ruta exacta donde se encuentra (dependiendo de los programas que tengas instalados, se encuentra en una ruta o otra)
Espero haberme explicado bien

Muchas gracias

Quizás leyendo los valores de instalación en el registro de Windows

HKEY_CURRENT_USER\Software\eDrawings\e2019\InstallDir

Así obtienes la ruta de eDrawings.exe y EModelViewer.exe, la cual puedes usar con ShellExecute. O ejecutar eDrawings.exe + "ruta\nombre.dwg"

mblascog 17-02-2019 11:59:17

Gracias por la respuesta, y parece que vaya buscando los problemas, pero eDrawings, dependiendo de la versión tiene una o otra entrada en el registro.
Se me ha ocurrido, como solución rápida y no tener que ir cambiando el programa según las versiones de Delphi, de crear un acceso directo a la C:\ de cada pc, y desde delphi, si se puede, intentar ejecutar este acceso directo.

Informaré del resultado. Muchas gracias de nuevo

mblascog 17-02-2019 17:34:57

Buenas, existe alguna diferencia entre ejecutar un programa o un acceso directo?

Este código abre eDrawings:
Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
  var ruta: string;
begin
  edit1.text := '';
  edit1.PasteFromClipboard;
  ruta := 'C:\Program Files\Common Files\eDrawings2019\eDrawings.exe';

  if fileexists(edit1.text) then
    ShellExecute(Handle, 'open', PAnsichar(ruta), PAnsichar(edit1.text), nil, SW_SHOW)
  else
    Showmessage('No existe fichero');
  Application.Terminate;
end;

He creado un acceso directo en la c:\ que abre eDrawings, lo he probado. Y cuando lo intento ejecutar en Delphi no:

procedure TForm1.FormActivate(Sender: TObject);
var ruta: string;
begin
edit1.text := '';
edit1.PasteFromClipboard;
ruta := 'C:\eDrawings.lnk';

if fileexists(edit1.text) then
ShellExecute(Handle, 'open', PAnsichar(ruta), PAnsichar(edit1.text), nil, SW_SHOW)
else
Showmessage('No existe fichero');
Application.Terminate;
end;

Alguien sabe por qué??
Muchas gracias

Casimiro Notevi 17-02-2019 17:55:31

;)





mblascog 17-02-2019 18:47:35

Perdón, el primero lo he hecho, el segundo no, es un poco difícil con el móvil. I

Casimiro Notevi 17-02-2019 19:17:50

Cita:

Empezado por mblascog (Mensaje 530705)
Perdón, el primero lo he hecho, el segundo no, es un poco difícil con el móvil. I

Yo con el móvil no puedo ni teclear :eek: Bastante has podido hacer.

mblascog 18-02-2019 21:10:18

Sigo con el problema y no consigo ejecutar el acceso directo:

Código Delphi [-]
procedure TForm1.FormActivate(Sender: TObject);
  var ruta: string;
      error: integer;
begin
  edit1.text := '';
  edit1.PasteFromClipboard;

  if fileexists(edit1.text) then
  begin
    error := ShellExecute(0, 'open', Pchar('C:\eDrawings.lnk'), Pchar(edit1.text), Pchar('C:\'), SW_SHOWNORMAL);
    showmessage(inttostr(error));
  end
  else
    Showmessage('No existe fichero');
  Application.Terminate;
end;

He añadido que ShellExecute devuelva error.
Devuelve el 31: No existe aplicación asociada con esta extensión, es decir, no sabe ejecutar el accesso directo.

Buscando por Internet, veo posts de que es posible poder ejecutar un acceso directo, pero no sé como resolverlo.

Alguna idea. Gracias


La franja horaria es GMT +2. Ahora son las 05:48:10.

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