PDA

Ver la Versión Completa : pasar parametros ms-dos desde mi aplicacion


ixMike
31-01-2005, 20:30:59
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:

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