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)
-   -   pasar parametros ms-dos desde mi aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=18067)

ixMike 31-01-2005 20:30:59

pasar parametros ms-dos desde mi aplicacion
 
Saludos

Tengo un ejecutable, un programa que comprime archivos (no está hecho por mí), que es para MS-DOS. Con la consola de comandos puedo trabajar con él. Un ejemplo de su uso es éste:

uharc.exe a -d1 -m3 data archivo.exe

"uharc.exe" es el nombre de eese ejecutable, lo demás son parámetros (comprimir, tipo de compresion, archivo a crear y archivo a comprimir). Estoy haciendo un programa en Delphi 3 Std, y quiero que llame a "uharc.exe" con esos parámetros que he escrito antes. He probado con todo lo que sé (crear un .bat y ejecutarlo[truco de trucomanía], utilizar WinExec y ShellExecute con el programa), pero no logro hacerlo funcionar. ¿Qué puedo hacer?

Uso WinXP Pro (aunque me gustaría que funcionara en Win98)

"uharc.exe" y el archivo a comprimir se encuentran en el mismo directorio, asi como el fichero ejecutable del programa que estoy haciendo

He comprobado que todo funciona bien excepto cuando mando al "uharc.exe" comprimir el archivo

Este código me funcionó una vez (una cosa muy rara, porque fue la única):

ChDir(ExtractFilePath(ParamStr(0)));
WinExec(PChar('uharc.exe a -d1 -m3 data '+ExtractFileName(destino)),SW_NORMAL); // ExtractFileName(destino) es "Archivo.exe"

Help!... I need somebody, Help!...

Gracias :)

Coco 31-01-2005 21:15:44

Prueba con poner todo entre comillas dobles ""

Salu2

Lepe 01-02-2005 09:52:21

En lugar de usar WinExec, yo usaba ShellExecute, porque puedes darles más parámetros, es decir, para esta función te pide:
Código Delphi [-]
  ShellExecute(Form1.Handle,
               'Open',
               'c:\uharc.exe','a -d1 -m3 "mi archivodestino".kkk',
               '"c:\Archivos de programa\uno"',
               SW_NORMAL);

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PChar; ShowCmd: Integer): HINST; stdcall;

Filename = archivo a ejecutar
Parameters = pues todos los parametros que lleva, los modificadores y los archivos de origen y destino (pasale la ruta completa entre comillas dobles como ya te han dicho)
Directory = directorio donde ejecutarlo
Showcmd mira en windows.pas
{ ShowWindow() Commands }
SW_HIDE = 0;
SW_SHOWNORMAL = 1;
SW_NORMAL = 1;
SW_SHOWMINIMIZED = 2;
SW_SHOWMAXIMIZED = 3;
SW_MAXIMIZE = 3;
SW_SHOWNOACTIVATE = 4;
SW_SHOW = 5;
SW_MINIMIZE = 6;
SW_SHOWMINNOACTIVE = 7;
SW_SHOWNA = 8;
SW_RESTORE = 9;
SW_SHOWDEFAULT = 10;
SW_MAX = 10;

Si haces una interfaz amigable para el uharc.exe, avisa, que es un compresor multimedia muy bueno ;).


Saludos

ixMike 09-02-2005 23:16:52

Muchas gracias :)

Ya probe algo parecido con el shellexecute pero no me funciono. Probare lo que tu dices

Saludos !!!

CHiCoLiTa 13-02-2005 15:04:58

Algo parecido me ocurrio a mi con otro programa.
Le estuve dando vueltas, ShellExecute, WinExec, crear bat identico a lo que escribo en MS-DOS y los resultados eran identicos a los tuyo sin explicacion a aparente.

Cuando estaba desesperado y haciendo cosas absurdas se me ocurrio la tonteria de crear un bat, ejecutarlo para que me hiciera el proceso y borrarlo. Pero en el bat no ponia directamente el comando, lo primero que hacia era posicionarme en el lugar donde se encontraba el ejecutable y luego escribia el comando y con esta 'chapucilla' ya me funciono.
Código:

c: \
cd "archivos de programa"
cd uharc
uharc.exe a -d1 -m3 data archivo.exe

Una de las claves que me llevo a pensar que no iba a funcionarme nunca usase el WinExec o cualquier otro tipo de llamada fue que poniendo el comando que escribia directamente en MS-DOs en la ventana de Ejecutar del menu de inicio tampoco funcionaba

Lepe 13-02-2005 15:56:38

Cita:

Empezado por CHiCoLiTa
Una de las claves que me llevo a pensar que no iba a funcionarme nunca usase el WinExec o cualquier otro tipo de llamada fue que poniendo el comando que escribia directamente en MS-DOs en la ventana de Ejecutar del menu de inicio tampoco funcionaba

Si lo he entendido bien, es problema de rutas, es decir, si en el comando ejecutar pones " uharc.exe" y el compresor no está en la variable de entorno path, windows no va a encontrar el compresor, sin embargo poniendo "f:\compresores\uharc.exe" si va a ejecutarlo, otra cosa distinta es que se cierre la ventana de ms-dos tan rápido que no veas la salida.

en el archivo bat, lo que haces es cambiar de directorio; Esto tambien se puede conseguir con la funcion chdir de delphi.

Un detalle que se me escapó en el post anterior es indicar correctamente la ruta donde crear el archivo comprimido, useasé:
donde dice: "mi archivodestino".kkk'
debe decir : "C:\mi archivodestino.kkk"

Más de una vez he creado un archivo .ini sin la ruta y se ha ido a parar a la carpeta c:\Windows :D

Saludos


La franja horaria es GMT +2. Ahora son las 08:21:27.

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