Parametros de Executaveis
Bom dia,
Como faço para passar um parametro de um progrma para outro (ambos criados por mim)
Queria fazer algo semelhante a isso:
Tenho um sistema qualquer, que acessar um banco de dados (Firebird), quero criar um outro programa para efetuar backps (criar outro exe) e fazer a chamada através do primeiro programa. Mas minha dúvida é, como posso passar o caminho do banco de dados para esse backup, sendo invisivel para o usuário? Assim, no momento que ele chamasse o sistema de backup, automaticamente recebece o caminho.
Pensei nisso para poder utilizar o mesmo sistema de backup em vários outros sistemas
Ps.: Espero ter conseguido explicar bem.
Como faço para passar um parametro de um progrma para outro (ambos criados por mim)
Queria fazer algo semelhante a isso:
Tenho um sistema qualquer, que acessar um banco de dados (Firebird), quero criar um outro programa para efetuar backps (criar outro exe) e fazer a chamada através do primeiro programa. Mas minha dúvida é, como posso passar o caminho do banco de dados para esse backup, sendo invisivel para o usuário? Assim, no momento que ele chamasse o sistema de backup, automaticamente recebece o caminho.
Pensei nisso para poder utilizar o mesmo sistema de backup em vários outros sistemas
Ps.: Espero ter conseguido explicar bem.
Fábio Cruz
Curtidas 0
Respostas
Wilson Junior
10/03/2010
var
Parametros: string;
begin
Parametros := ' C:\BancoDados\Banco.FDB'
ShellExecute( 0, nil, PAnsiChar(CaminhoArquivo + Parametros), nil, nil, SW_SHOWNORMAL );
end;
Espero ter colaborado.
Parametros: string;
begin
Parametros := ' C:\BancoDados\Banco.FDB'
ShellExecute( 0, nil, PAnsiChar(CaminhoArquivo + Parametros), nil, nil, SW_SHOWNORMAL );
end;
Espero ter colaborado.
GOSTEI 0
Rad Informatica
10/03/2010
no seu programa de backup pegue o parametro passado via linha de comando usando a funcao paramstr(1)
ex:
procedure TfrmMain.FormCreate(Sender: TObject); VAR bdPadrao :string;
begin
CaminhoBackup :=paramstr(1)
end;
no seu programa principal (que vai chamar o do backup)
declare essa funcao abaixo.
eu uso ela pois vc chama o executavel externo e aguarda a finalização.
nao vai deixar o cara fazer nada ate fechar o programa do backup.
em um botao vc usa
ExecAndWait('C:\SEUPROGRAMA\SEUBACKUP.EXE',' C:\BACKUP',SW_NORMAL);
O ITEM ' C:\BACKUP' e o parametro que vai ser enviado para o seu programa do backup
note o espaco o inicio!
la quando seubackup.exe abrir a variavel Caminhobackup vai receber o diretorio.
se vc quizer passar varios parametros e so ir passando separando por " " (aspa dupla)
se o caminho do backup tiver espaco, passe com " " (aspa dupla)
la e so pegar com paramstr(1) paramstr(2) ..... etc..
veja a funcao.
function ExecAndWait(const FileName, Params: string; const WindowState: Word): boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
CmdLine := '"' + Filename + '"' + Params;
FillChar(SUInfo, SizeOf(SUInfo), #0);
With SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;
Result := CreateProcess(nil,
PChar(CmdLine),
nil,
nil,
false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,
PChar(ExtractFilePath(Filename)),
SUInfo,
ProcInfo);
if Result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
ex:
procedure TfrmMain.FormCreate(Sender: TObject); VAR bdPadrao :string;
begin
CaminhoBackup :=paramstr(1)
end;
no seu programa principal (que vai chamar o do backup)
declare essa funcao abaixo.
eu uso ela pois vc chama o executavel externo e aguarda a finalização.
nao vai deixar o cara fazer nada ate fechar o programa do backup.
em um botao vc usa
ExecAndWait('C:\SEUPROGRAMA\SEUBACKUP.EXE',' C:\BACKUP',SW_NORMAL);
O ITEM ' C:\BACKUP' e o parametro que vai ser enviado para o seu programa do backup
note o espaco o inicio!
la quando seubackup.exe abrir a variavel Caminhobackup vai receber o diretorio.
se vc quizer passar varios parametros e so ir passando separando por " " (aspa dupla)
se o caminho do backup tiver espaco, passe com " " (aspa dupla)
la e so pegar com paramstr(1) paramstr(2) ..... etc..
veja a funcao.
function ExecAndWait(const FileName, Params: string; const WindowState: Word): boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
CmdLine := '"' + Filename + '"' + Params;
FillChar(SUInfo, SizeOf(SUInfo), #0);
With SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;
Result := CreateProcess(nil,
PChar(CmdLine),
nil,
nil,
false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,
PChar(ExtractFilePath(Filename)),
SUInfo,
ProcInfo);
if Result then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
GOSTEI 0