PDA

Ver la Versión Completa : c++ Builder enviar parametros


JXJ
27-03-2011, 03:55:28
hola en C++ Builder

¿como puedo pasar parametros ¡?

especialmente al enviar parametros con espacios

por ejemplo abrir archivo que esta en

C:\miapp.exe

tengo este codigo pero no se como hacerle

por que los parametros que la aplicacion recibe.

se muestran asi.

c:\miapp.exe
parametro
1
parametro
2
parametro
_3


y yo quiero que salgan asi.
c:\miapp.exe
parametro 1
parametro 2
parametro _3





//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
BOOL CreateProcess(
LPCWSTR pszImageName,
LPCWSTR pszCmdLine,
LPSECURITY_ATTRIBUTES psaProcess,
LPSECURITY_ATTRIBUTES psaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID pvEnvironment,
LPWSTR pszCurDir,
LPSTARTUPINFOW psiStartInfo,
LPPROCESS_INFORMATION pProcInfo
);

void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO StartInfo;// name structure
PROCESS_INFORMATION ProcInfo; // name structure
memset(&ProcInfo, 0, sizeof(ProcInfo)); // Set up memory block
memset(&StartInfo, 0 , sizeof(StartInfo)); // Set up memory block
StartInfo.cb = sizeof(StartInfo); // Set structure size


char *sCmdLin = "C:\\miapp.exe 'parametro 1' 'parametro 2' 'parametro _3' " ;
int res = CreateProcess(NULL, sCmdLin , NULL, NULL, NULL, NULL, NULL, NULL, &StartInfo, &ProcInfo);

}
//---------------------------------------------------------------------------


ayuda no entiendo

gracias por su atencion.

Casimiro Notevi
27-03-2011, 20:36:27
Cuando hay espacios debes indícar el texto entre comillas, ejemplo: "c:\documents and settings\tu carpeta\tuprograma.exe"

JXJ
28-03-2011, 00:04:14
Cuando hay espacios debes indícar el texto entre comillas, ejemplo: "c:\documents and settings\tu carpeta\tuprograma.exe"


entonces asi.


char *sCmdLin = "C:\\miapp.exe "parametro 1" "parametro 2" "parametro _3" " ;


mm char *sCmdLin = "C:\\miapp.exe 'parametro 1' 'parametro 2' 'parametro _3' " ;

dejame revisarlo.


ptra cosas a fuerzas se tiene que poner la doble barra??
C:\\

o solo con C:\

si es doble barra a fuerza. como la pongo???
si se supone que el programa lo obtiene el directorio de windows.
o de archivos de texto que manejan solo C:\archivos de programa\mi app\

escafandra
28-03-2011, 00:27:45
Con CreateProcess:

PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
bool bRet = CreateProcess(0, "C:\MiPrograma.exe param1 param2,0,0,0,0,0,0,&si,&pi);


Con ShellExecute:

ShellExecute(0, 0, "C:\MiPrograma.exe", "param1 param2", 0, SW_SHOW);




Saludos.

JXJ
28-03-2011, 06:09:09
Con CreateProcess:

PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
bool bRet = CreateProcess(0, "C:\MiPrograma.exe param1 param2,0,0,0,0,0,0,&si,&pi);


Con ShellExecute:

ShellExecute(0, 0, "C:\MiPrograma.exe", "param1 param2", 0, SW_SHOW);




Saludos.

funciona pero solo en parte.

por que yo quiero pasar paramtros.
asi

bool bRet = CreateProcess(0, "C:\MiPrograma.exe param 1 param 2 ,0,0,0,0,0,0,&si,&pi);

son 2 parametros

y que pueda recibirllos asi.

param 1

param 2


en la forma que me propnene salen asi

C:\MiPrograma.exe
param
1


lo que quiero es poder pasarle la ruta de otra aplicacion .
y de otros documentos. a mi aplicacion.

la ruta es

c:\archivos de programa\winrar.exe

y
el archivo a comprimir es

C:\Users\jxj\Documents\mi carpeta\archivo emails.txt



como ven hay espacios. y no se como manejarlos.
con c++ builder 6..

escafandra
28-03-2011, 14:46:48
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
CreateProcess(0, "Miprograma.exe \"c:\\archivos de programa\\winrar.exe\" \"C:\\Users\\jxj\\Documents\\mi carpeta\\archivo emails.txt\"",0,0,0,0,0,0,&si,&pi);


Saludos.

JXJ
28-03-2011, 23:47:27
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
CreateProcess(0, "Miprograma.exe \"c:\\archivos de programa\\winrar.exe\" \"C:\\Users\\jxj\\Documents\\mi carpeta\\archivo emails.txt\"",0,0,0,0,0,0,&si,&pi);


Saludos.

vientos.. ahora lo pruebo..

sol una duda mas respecto a \\
casi siempre lo manjo asi \
en todo archivos ini.
lo tengo asi.

[winrar]
AppPat=c:\archivos de programa\winrar.exe\

como se le agregan los 2 \\ si yo manejo \

he probado y no responde si pongo \
solo responde si pongo \\

mmm. reviso y aver que pasa.

escafandra
29-03-2011, 00:10:37
Cuando escribes código C el carácter '\' es de control. El compilador espera recibir otro caracter (\n, \r. \"...) asi, cuando quieres poner un '\' debes poner '\\'. Para poner unas comillas en un texto debes poner \", para diferenciar esas comillas de las que debes poner en la sintaxis.

Cuando lees un ini con una ruta C:\loquesea, el compilador lo interpreta tal cual, no actúan los caracteres de control, porque no estamos escribiendo código.

Los parámetros, cuando llevan espacios en su interior, deben ir encerrados entre comillas. Así, param numero uno, debe ir escrito en el código así:

"\"param numero uno\""

De esta forma el sistema lo considera como un sólo parámetro.


Saludos.