PDA

Ver la Versión Completa : Saber ruta de un exe


mblascog
07-02-2019, 00:25:19
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.



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
https://i.imgur.com/6qa7kKd.png

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
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




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

MAXIUM
09-02-2019, 19:48:24
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:
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
;)




http://www.clubdelphi.com/images/UtilizarTAGs.png

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
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:

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