Primero pido disculpas si ya hay algun hilo, pero no lo he encontrado, tampoco estoy seguro ke sea el sitio para poner esto, pero bueno ya me comentais.
Mi idea parece muy facil pero no se como se hace.
Yo tengo un Proyecto que se llama Programa.exe i luego he hecho como subprogramas que dependen del mismo exe. Asi si quiero ver los clientes pues desde Programa.exe ejecuto el Cliente.exe con parametros, asi directamente abro el cliente que yo quiero. La conexion a la base de datos la tengo en un ini, asi cada programa tiene la misma configuracion.
Hasta aqui funciona todo ok, no parece dificil, el problema viene cuando Clientes.exe ya esta abierto no quiero abrir Otro, con lo cual si esta abierto me gustaria enviarle los parametros i volver ha ejecutar las fucniones de carga.
De momento la unica solucion que he encontrado es cerrar la aplicacion i volver a abrirla, pero no me gusta la solucion.
No se si deberia ser una aplicacion cliente servidor en la misma maquina...
Bueno a ver si alguien me da un poco de luz!!!
Muchas Gracias

Pasar parametros entre ejecutables en ejecuccion?
Comenzado por
GlauK
, abr 28 2011 08:55
5 respuestas en este tema
#1
Escrito 28 abril 2011 - 08:55
#2
Escrito 28 abril 2011 - 12:35
Saludos amigo. En este hilo me resolvieron una duda parecida.
Saludox
Saludox
#3
Escrito 28 abril 2011 - 12:54
En que Hilo?
Me puedes pasar el link?
Muchas Gracias
Me puedes pasar el link?
Muchas Gracias
#4
Escrito 28 abril 2011 - 02:52
#5
Escrito 29 abril 2011 - 11:17
Hola a toda la Comunidad.
Quizas en vez de utilizar un archivo de texto o un archivo ini, puedas utilizar el registro de windows.
la unidad es Registry, el tipo de objeto es TRegistry.
declaras una variable
y sobre codigo guardas variables o parametros que necesites, y cualquier otra aplicacion la puede leer en cualquier momento.
a mi me sirve mucho para guardar las conexiones de bases de datos ADO, cuardo un string o varios, con los datos de servidor, usuario, contraseña, color de las formas, tiempo de reconexion.
para escribir en el registro hago esto:
para leer el registro hago esto:
otro uso que le tengo es en un punto de venta, cuando hay muchos clientes en espera, dejo pendiente la ventana de cobro de ese cliente, abro otro ejecutable y este otro ejecutable abre desde el registro que empleado (usuario) esta cobrando en ese momento, asi ya no tiene que iniciar sesión las veces que abra el cobro emergente.
esperando y sea util este ejemplo me despido
Quizas en vez de utilizar un archivo de texto o un archivo ini, puedas utilizar el registro de windows.
la unidad es Registry, el tipo de objeto es TRegistry.
declaras una variable
delphi
Var Reg : TRegistry;
y sobre codigo guardas variables o parametros que necesites, y cualquier otra aplicacion la puede leer en cualquier momento.
a mi me sirve mucho para guardar las conexiones de bases de datos ADO, cuardo un string o varios, con los datos de servidor, usuario, contraseña, color de las formas, tiempo de reconexion.
para escribir en el registro hago esto:
delphi
Reg := TRegistry.Create(KEY_WRITE); try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\Software\Empresa\POS\Sucursal\Principal', True) then begin try If EdServidorPrincipal.Text<>'' then Reg.WriteString('ServPal', EdServidorPrincipal.Text); If EdUsuarioPrincipal.Text<>'' then Reg.WriteString('UsPal', EdUsuarioPrincipal.Text); If EdContraseniaPrincipal.Text<>'' then Reg.WriteString('RevPal', EdContraseniaPrincipal.Text); If EdServidorPrincipal.Text<>'' then Reg.WriteString('BDDPal', EdBasePrincipal.Text); except Reg.CloseKey; raise; end; Reg.CloseKey; end else raise Exception.Create(SysErrorMessage(GetLastError)); finally Reg.Free; end;
para leer el registro hago esto:
delphi
Reg3 := nil; try Reg3 := TRegistry.Create(KEY_QUERY_VALUE); Reg3.RootKey :=HKEY_LOCAL_MACHINE; if Reg3.OpenKey('\Software\empresa\POS\Sucursal\Sitio',True) then begin try Result := Reg3.ReadString('ServSit'); If Result <> '' then Begin ServidorSit:= Result; End; Result := Reg3.ReadString('UsSit'); If Result <> '' then Begin sUsuarioSit:= Result; End; Result := Reg3.ReadString('RevSit'); If Result <> '' then Begin ContraseniaSit:= Result; End; Result := Reg3.ReadString('BDDSit'); If Result <> '' then Begin BaseSit:= Result; End; except Begin Reg3.CloseKey; raise; End; end; Reg3.CloseKey; end else Begin raise Exception.Create(SysErrorMessage(GetLastError)); end except Begin Reg3.Free; end; raise; end; Reg3.Free;
otro uso que le tengo es en un punto de venta, cuando hay muchos clientes en espera, dejo pendiente la ventana de cobro de ese cliente, abro otro ejecutable y este otro ejecutable abre desde el registro que empleado (usuario) esta cobrando en ese momento, asi ya no tiene que iniciar sesión las veces que abra el cobro emergente.
esperando y sea util este ejemplo me despido
#6
Escrito 03 mayo 2011 - 08:44
El tema de comunicación entre aplicaciones fue resuelto hace años por técnicas implementadas por el sistema operativo. En Unix se habla de memoria compartida, tuberías, semaforos, etc.
En windows con Delphi se tienen varias opciones. Entre ellas está CORBA o mecanismos del mismo Windows.
De este último tal vez te interese este artículo
http://www.delphi-ce...endmessage.aspx
En windows con Delphi se tienen varias opciones. Entre ellas está CORBA o mecanismos del mismo Windows.
De este último tal vez te interese este artículo
http://www.delphi-ce...endmessage.aspx