Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Enviar parametros de una aplicacion a otra en ejecucion (https://www.clubdelphi.com/foros/showthread.php?t=83976)

Caroso 23-08-2013 02:07:16

Enviar parametros de una aplicacion a otra en ejecucion
 
Buenas noches amigos del foro... tengo una duda que seguro ustedes podrian solucionarme... alguno sabria como hacer para pasarle un parametro a un aplicacion que ya se encuentra en ejecucion?¿ por ejemplo.. tengo este codigo en el inicio de mi form:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
    i : integer;
 begin
   for i:= 0 to ParamCount do
     Memo1.Lines.Append(ParamStr(i));
end;

mediante el acceso directo del .exe paso dos parametros que me los lista en el memo... el tema es que quiero enviar parametros no cuando arranca el programa si no cuando se esta ejecutando... :confused:

si no se entiende la idea la explayo un poco mas... muchas gracias a todos y que terminen lindo el dia :)

ecfisa 23-08-2013 04:48:55

Hola Caroso.

Revisa si te sirven estos enlaces:
  1. Lamar una aplicación y ejecutar acciones
  2. que en lblmarquee se pueda copiar un renglon

Saludos :)

Caroso 23-08-2013 05:11:24

prueba
 
muchas gracias ecfisa.. los revisare y te comento... saludos :)

nlsgarcia 23-08-2013 11:27:56

Caroso,

Cita:

Empezado por Caroso
...¿como hacer para pasarle un parámetro a un aplicación que ya se encuentra en ejecución?...

Una opción complementaria a lo sugerido en el Msg #2 es por medio de Sockets en Delphi.

Revisa este código:
Código Delphi [-]
unit UClient;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ExtCtrls;

type
  TClientCmd = class(TForm)
    Edit1: TEdit;
    ClientSocket1: TClientSocket;
    Button1: TButton;
    Button2: TButton;
    RadioGroup1: TRadioGroup;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure OnClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure OnError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure Button2Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ClientCmd: TClientCmd;

implementation

{$R *.dfm}

procedure TClientCmd.FormCreate(Sender: TObject);
begin
   ClientSocket1.Port :=  23;
   ClientSocket1.Host :=  '127.0.0.1'; // IP Local, Cliente y Servidor residen en la misma máquina.
   ClientSocket1.Active :=  true;
end;

procedure TClientCmd.OnClose(Sender: TObject; var Action: TCloseAction);
begin
   ClientSocket1.Active := false;
end;

procedure TClientCmd.Button1Click(Sender: TObject);
begin
   if ClientSocket1.Active then
      ClientSocket1.Socket.SendText(Edit1.Text);
end;

procedure TClientCmd.OnError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
   if ErrorCode = 10061 then
   begin
      raise Exception.Create('El Servidor No Esta Activo, Pulse "Open Socket" para Reintentar');
      ClientSocket1.Close;
   end;
   ErrorCode := 0
end;

procedure TClientCmd.Button2Click(Sender: TObject);
begin
   ClientSocket1.Open;
end;

procedure TClientCmd.RadioGroup1Click(Sender: TObject);
begin
   Edit1.Text := RadioGroup1.Items.Strings[RadioGroup1.ItemIndex];
end;

end.
El código anterior envía por medio del componente TClientSocket un String (Parámetros, Comandos, Data) a una aplicación que funge como servidor y procesa la data recibida.

Revisa este código:
Código Delphi [-]
unit UServer;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ScktComp, ShellAPI, Sockets;

type
  TServerCmd = class(TForm)
    ServerSocket1: TServerSocket;
    Memo1: TMemo;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure OnClose(Sender: TObject; var Action: TCloseAction);
    procedure OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
   ServerCmd: TServerCmd;

implementation

{$R *.dfm}

function StringToCaseSelect(Selector : String; CaseList: Array of String): Integer;
var
   pos: integer;
begin
   Result := -1;
   for pos := 0 to Length(CaseList)-1 do
   begin
      if CompareText(Selector, CaseList[pos]) = 0 then
      begin
         Result := pos;
         Break;
      end;
   end;
end;

procedure TServerCmd.FormCreate(Sender: TObject);
begin
   ServerSocket1.Port := 23;
   ServerSocket1.Active := True;
end;

procedure TServerCmd.OnClose(Sender: TObject; var Action: TCloseAction);
begin
   ServerSocket1.Active := false;
end;

procedure TServerCmd.OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
   cmd : string;
begin
   cmd := Socket.ReceiveText;
   case StringToCaseSelect(cmd,['calc','notepad','paint','cmd','msg']) of
      0 : ShellExecute(0, nil, 'calc.exe', nil, nil, SW_NORMAL);
      1 : ShellExecute(0, nil, 'notepad.exe', nil, nil, SW_NORMAL);
      2 : ShellExecute(0, nil, 'mspaint.exe', nil, nil, SW_NORMAL);
      3 : ShellExecute(0, nil, 'cmd.exe', nil, nil, SW_NORMAL);
      4 : MessageDlg('Msg',  mtInformation, [mbOK], 0);
   end;
   Memo1.Lines.Add(cmd);
end;

end.
El código anterior recibe por medio del componente TServerSocket la data enviada por una aplicación cliente (Parámetros, Comandos, Data) y procesa la misma.

Los ejemplos están disponibles en el link: http://terawiki.clubdelphi.com/Delph...rverSocket.rar

Revisa estos links:
Cita:

1- Exchanging Data over the Network using Delphi : http://delphi.about.com/od/networking/l/aa112602a.htm

2- TServerSocket and TClientSocket are Missing from Delphi 7 : http://edn.embarcadero.com/article/29768

3- Capitulo 10.2 Programando Sockets en Delphi : http://www.hackerdude.com/courses/delphi/Cap010.2.html
Espero sea útil :)

Nelson.

Caroso 26-08-2013 19:30:51

Cita:

Empezado por ecfisa (Mensaje 465946)
Hola Caroso.

Revisa si te sirven estos enlaces:
  1. Lamar una aplicación y ejecutar acciones
  2. que en lblmarquee se pueda copiar un renglon

Saludos :)

Gracias por tu respuesta ecfisa... eh probado ambos codigos... me interesa el primero Lamar una aplicación y ejecutar acciones... lo descargue eh intente ejecutar... pero no pasaba nada... agrege un Showmessage al codigo receptor para investigar que era lo que sucedia... mediante el showmessage me di cuenta que lo que recibe el receptor es la cadena cortada... es decir en vez de recibir "Abrir" solo recibía "Abr", por lo cual no funcionaba...

ahora te pregunto si me podrias ayudar a solucionarlo... desde ya muchas gracias por tu tiempo... :)

Caroso 26-08-2013 21:29:36

Tema Cerrado
 
Ahi lo solucione muy facilmente muchas gracias a todos... saludos :)

ecfisa 26-08-2013 21:31:58

Cita:

Empezado por Caroso (Mensaje 466068)
Ahi lo solucione muy facilmente muchas gracias a todos... saludos :)

Me alegro :)

Ya había descargado los adjuntos para verificarlos, entonces los puedo borrar tranquilo...

Saludos :)


La franja horaria es GMT +2. Ahora son las 01:34:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi