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)
-   -   Lanzar programa desde mi programa (https://www.clubdelphi.com/foros/showthread.php?t=12272)

Pablo Carlos 11-07-2004 19:26:24

Lanzar programa desde mi programa
 
Hola Gente. aqui de nuevo...
Quisiera que mi prg ejecute otro programa por ejemplo el Word... y lo hago asi
WinExec(PChar('C:\ARCHIV~1\Microsoft Office\Office\WinWord.exe'), SW_SHOWNORMAL); hasta aqui todo bien... pero que sucede cuando se instalan nuevos programas? debería modificar mi programa para actualizarlo y me parece un poco rustico...
la idea es crear una base de datos donde yo carge las Path de cada exe y que mi programa, en su código tenga algo asi...

var Ruta : String;

Ruta := Label1.Caption; (o el contenido del campo. que esto no sería problema)
WinExec(PChar('Ruta'), SW_SHOWNORMAL);
Que obviamente no funciona... acepto sugerencias :)
Muchas gracias.... Pablo

eduarcol 11-07-2004 19:31:21

WinExec(PChar('Ruta'), SW_SHOWNORMAL);

Obviamente si encierras Ruta entre las comillas no te va a funcionar, por que el compilador asumira que quieres ejecutar Ruta, mas no el contenido de Ruta.

Lo que tendrias que hacer es

WinExec(PChar(Ruta), SW_SHOWNORMAL);

Suerte

Pablo Carlos 11-07-2004 19:37:38

Cita:

Empezado por eduarcol
WinExec(PChar('Ruta'), SW_SHOWNORMAL);

Obviamente si encierras Ruta entre las comillas no te va a funcionar, por que el compilador asumira que quieres ejecutar Ruta, mas no el contenido de Ruta.

Lo que tendrias que hacer es

WinExec(PChar(Ruta), SW_SHOWNORMAL);

Suerte

Excelente.... ahora lo que no entiendo es como se me escapan esos detalles tan simples :(
Muchas gracias

Pablo Carlos 11-07-2004 19:43:46

ahora si quisiera que mi prg se ejecute antes que continue la carga de windows (esto seria tipo usuario) en el registro no encuentro donde... estube buscando en hkey_local_machine -> software -> microsoft -> windows y no lo logro... por alli me dijeron que en la misma ruta pero en windowsnt-> winlogon (pero este winlogon no lo tengo--- estoy hablando de win95 y milenium
Tambien me encanta Venezuela :)

eduarcol 11-07-2004 20:03:54

Es que dentro de windows debe buscar la carpeta Current Version, y alli encontras winlogon, de todas formas esto puedes seguir discutiendolo en el otro hilo, respetemos la guia de estilo :D

Pablo Carlos 11-07-2004 20:06:07

ok.... dentro de current version no esta tampoco :( ... y en que hilo puedo seguir este tema? Gracias...

eduarcol 11-07-2004 20:15:20

Puedes seguir en este Hilo

Si pruebas creando la clave del registro a ver que sucede

JoseQ 13-07-2004 18:12:19

y si ademas de ejecutar un programa, keremos k este se abra con un archivo determinado, es decir,abrir x ejemplo un JPG con el imaging de win o con el photoshop. GRacias

eduarcol 13-07-2004 18:19:17

Solo se lo pasas por parametros:

Código:

winexec('"c\Imagen.exe" "c:\dibujo.jpg"')

JoseQ 13-07-2004 18:46:55

no me traga eso

mi codigo (segun tu version es asi)

windows.WinExec(cadena pchar(hint),1)


donde cadena es la ruta del programa, e Hint es el nombre del fichero que quiero cargar con el programa.

tambien e probrado a concatenar ambas cadenas para utilizar un solo parametro:

strcat(cadena , pchar(hint);
windows.WinExec(cadena ,1);

asi me compila bien, xo en runtime al ejecutar el codigo me abre el programa xo no el archivos

eduarcol 13-07-2004 18:52:16

lo mas seguro es que la ruta no sea la correcta
prueba copiandolo en la raiz para ver si es eso o no

JoseQ 13-07-2004 18:57:43

la ruta esta bien




esto es todo lo k ago

Código Delphi [-]
 
procedure TModuloImagenes.Image1DblClick(Sender: TObject);
const max=255    ;
var editor:tsearchrec;
    cadena:array [0..max] of char;
begin
strcopy(cadena,'c:\archivos de programa\archivos comunes\microsoft shared\photoed\photoed.exe  ' );
with sender as timage do
begin
strcat(cadena,pchar(hint));
showmessage(cadena); // solamente para comprobar la ruta
if FindFirst('c:\archivos de programa\archivos comunes\microsoft shared\photoed\photoed.exe',0,editor) = 0 then
windows.WinExec(cadena pchar(hint),1)  else
showmessage('No se encuentra el PhotoEditor');
end;
end;


el (Timage).hint contiene la misma cadena k se a cargado en el picture.loadfromfile, x lo tanto el contenido sera valido, despues le concateno delante la ruta (dejando un espacio en blanco) del photoeditor i lo ejecuto,

el resultado es que me abre el photoeditor pero no me abre la fotografia ...

eduarcol 14-07-2004 00:53:02

Código Delphi [-]
 
procedure TModuloImagenes.Image1DblClick(Sender: TObject);
const max=255    ;
var editor:tsearchrec;
    cadena:array [0..max] of char;
begin
strcopy(cadena,'"c:\archivos de programa\archivos comunes\microsoft shared\photoed\photoed.exe"  ' );
with sender as timage do
begin
strcat(cadena,pchar(Image1.Hint));
showmessage(cadena); // solamente para comprobar la ruta
if FindFirst('c:\archivos de programa\archivos comunes\microsoft shared\photoed\photoed.exe',0,editor) = 0 then
windows.WinExec(cadena pchar(hint),1)  else
showmessage('No se encuentra el PhotoEditor');
end;
end;
[/quote]

Prueba los dos pequeños cambio que te propongo a ver que sucede, no estoy muy seguro en referencias a objetos, pero creo que el Hint que estas capturando es el del Form y no el del Imagen

jachguate 14-07-2004 01:28:06

Si los nombres de archivo del programa y del que queres pasar como parámetro contienen espacios, tenes que encerrarlos entre comillas para que el sistema los considere un único parámetro:

por ejemplo:

WinExec('c:\archivos de programa\programa.exe c:\mis documentos\documento.doc');

tratará de ejecutar c:\archivos, pasándole como parámetros:

de
programa\programa.exe
c:\mis
documentos\documento.doc

totalmente erratico, no:

en cambio:

WinExec('"c:\archivos de programa\programa.exe" "c:\mis documentos\documento.doc'");

Tratará de ejecutar:

c:\archivos de programa\programa.exe

con el parámetro:

c:\mis documentos\documento.doc

otra opción es usar solamente nombres de archivo 8.3:

WinExec('c:\archiv~1\programa.exe c:\misdoc~1\documento.doc');

Hasta luego.

;)

JoseQ 14-07-2004 10:54:34

eduarcol, tu solucion no me sirve, ia k ese procedimiento solo sirve para la imagen1, y tengo 36 imagenes... xD tendria k escribir 36 procedimientos iguales !!! utilizando el parametro server le digo al compilador que objeto es el que4 a llamado al procedimiento, fijate que pongo with sender as timage ... en cuanto a jachguate probare pasando las dos cadenas x separado, xo tengo k pasarle variables, no cadenas literales, no puedo, x tanto ,usar las comillas


eduarcol el hint no es del form, comprobado x showmessage.pertenece a la imagen que llama al procedimiento

Pablo Carlos 14-07-2004 16:01:14

Por que no le pasas la ruta por un Var por ejemplo...
Var Ruta : string;
Ruta := Edit1.Caption
y la ruta la escribis en un Edit y cuando ejecutas WinExec(Ruta);
Te servira asi?
Saludos

JoseQ 14-07-2004 16:10:49

la ruta se la paso x variable,

[delphi]
procedure a;
var cadena:array[0..256] of char;
begin
strcopy(cadena,'c:\programa.exe archivo.doc');
winexec(cadena);
end;

pues esto me abre programa.exe xo no me carga archivo.doc

Pablo Carlos 14-07-2004 16:36:07

Mira lo acabo de probar y funciona...
C:\ARCHIV~1\Microsoft Office\Office\WinWord.exe c:\orden.doc %1
con esa cadena me abre el Word junto al archivo orden
Saludos

JoseQ 14-07-2004 16:54:22

prueba con el photoeditor del office

c:\archivos de programa\archivos comunes\microsoft shared\photoed\photoed.exe i el archivo de imagen k kieras

Pablo Carlos 14-07-2004 17:02:30

No tengo el photoed.exe :(
yo lo hago asi:
var Ruta : String;
begin
Ruta := edit.Caption;
WinExec(PChar(Ruta), SW_SHOWNORMAL);
end;
y ruta es igual a C:\ARCHIV~1\Microsoft Office\Office\WinWord.exe c:\orden.doc %1


La franja horaria es GMT +2. Ahora son las 21:34:38.

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