ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Passar dados de um executavel para outro

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
naviocabral
Novato
Novato


Registrado: Sexta-Feira, 2 de Junho de 2006
Mensagens: 24

MensagemEnviada: Qui Ago 15, 2013 9:38 pm    Assunto: Passar dados de um executavel para outro Responder com Citação

Pessoal !!! Utilizo o delphi 7, com firebird 2.5. Criei um sistema com muitos módulos. Agora estou precisando passar 2 campos de informações de um executavel para outro. O módulo principal após iniciado, chamará os outros módulos a execução destes outros necessita de uma informação que venha do principal. Hoje eu chamo os módulos pelo Winexec, utilizando da seguinte forma:
Após chamar o módulo executo

begin
WinExec('\ISPSSist\ContasPagar.exe',SW_NORMAL);
end;

Pergunto como faço para um campo por exemplo: código do usuário nominado:

usuario : Integer;

Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jguto
Novato
Novato


Registrado: Segunda-Feira, 19 de Março de 2012
Mensagens: 88
Localização: Avaré, SP

MensagemEnviada: Sex Ago 16, 2013 9:40 am    Assunto: Responder com Citação

olá, eu utilizo o procedimento a seguir pra chamar um novo aplicativo passando parametros

Código:

//Adicione ShellApi aos uses
procedure ShellExecute_AndWait(FileName: string; Params: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    ExInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := SW_SHOWNORMAL;
  end;

  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;

  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;

  CloseHandle(Ph);
end;



Onde

Citação:
FileName := Caminho completo do exe a ser chamado;
Params := Lista de Parametros a serem passados - Aqui voce deverá passar os paramentros como string e separando um do outro com espaços. Ex: 'CodUsuario NomeUsuario';


Na aplicação a ser chamada, voce consegue recuperar estes valores atraves da Função ParamStr.

Ex:

Citação:
ParamStr(0) = Retornará o caminho completo do aplicativo
ParamStr(1) = Retornará o primeiro campo que vc passou na chamada( CodUsuario)
ParamStr(2) = Retornará o segundo campo que vc passou na chamada( NomeUsuario)


Exemplo da Chamada
Código:
ShellExecute_AndWait('C:\Users\Adm\Desktop\Teste\Project2.exe','01 Usuario');


Exemplo no aplicativo Chamado

Citação:
ShowMessage(ParamStr(0) + ' - '+ ParamStr(1) + ' - ' + ParamStr(2) );
Saida = C:\Users\Adm\Desktop\Teste\Project2.exe - 01 - Usuario


espero ter ajudado..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
naviocabral
Novato
Novato


Registrado: Sexta-Feira, 2 de Junho de 2006
Mensagens: 24

MensagemEnviada: Sex Ago 16, 2013 8:43 pm    Assunto: Responder com Citação

jguto escreveu:
olá, eu utilizo o procedimento a seguir pra chamar um novo aplicativo passando parametros

Código:

//Adicione ShellApi aos uses
procedure ShellExecute_AndWait(FileName: string; Params: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    ExInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := SW_SHOWNORMAL;
  end;

  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;

  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;

  CloseHandle(Ph);
end;



Onde

Citação:
FileName := Caminho completo do exe a ser chamado;
Params := Lista de Parametros a serem passados - Aqui voce deverá passar os paramentros como string e separando um do outro com espaços. Ex: 'CodUsuario NomeUsuario';


Na aplicação a ser chamada, voce consegue recuperar estes valores atraves da Função ParamStr.

Ex:

Citação:
ParamStr(0) = Retornará o caminho completo do aplicativo
ParamStr(1) = Retornará o primeiro campo que vc passou na chamada( CodUsuario)
ParamStr(2) = Retornará o segundo campo que vc passou na chamada( NomeUsuario)


Exemplo da Chamada
Código:
ShellExecute_AndWait('C:\Users\Adm\Desktop\Teste\Project2.exe','01 Usuario');


Exemplo no aplicativo Chamado

Citação:
ShowMessage(ParamStr(0) + ' - '+ ParamStr(1) + ' - ' + ParamStr(2) );
Saida = C:\Users\Adm\Desktop\Teste\Project2.exe - 01 - Usuario


espero ter ajudado..


Cara, eu acho que essa rotina que voce montou é muito avançada para meus conhecimentos. Eu não tenho tanto conhecimento assim. Você poderia se fosse possível, me passar algo utilizando destes comando que te dei ? Obviamente que se não existe como vou tentar entender o que voce passou. Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jguto
Novato
Novato


Registrado: Segunda-Feira, 19 de Março de 2012
Mensagens: 88
Localização: Avaré, SP

MensagemEnviada: Seg Ago 19, 2013 8:55 am    Assunto: Responder com Citação

cara, não tem muito segredo aqui não, primeiro vc vai colocar a seguinte procedure no teu sistema

Código:
//Adicione ShellApi aos uses
procedure ShellExecute_AndWait(FileName: string; Params: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    ExInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := SW_SHOWNORMAL;
  end;

  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;

  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;

  CloseHandle(Ph);
end;


depois vc só vai trocar a chamada de

Código:
WinExec('\ISPSSist\ContasPagar.exe',SW_NORMAL);


por

Código:
ShellExecute_AndWait('\ISPSSist\ContasPagar.exe','Informação1, Informacão2, ..');
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB