| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
lelly_lunatica Novato

Registrado: Quarta-Feira, 21 de Setembro de 2005 Mensagens: 2
|
Enviada: Qua Set 21, 2005 2:28 pm Assunto: winexec me complica |
|
|
olá !!
pois é... eu tava fazendo um programa em delphi (5) e eu não sabia como fazer backup das informações do banco de dados... então pensei em criar um arquivo .bat com os comandos e executá-lo no evento onclick do botão com o comando winexec.
maaaas... quando eu clico no tal botão ele simplesmente sai do programa e não faz nada...
alguém sabe porque???
bom dia de sol pra todos !!! |
|
| Voltar ao Topo |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Qua Set 21, 2005 2:37 pm Assunto: winexec me complica |
|
|
Olá...
Seja bem vindo ao fórum....
para melhor te ajudar, seria bom q vc colocasse aki seu codigo com problemas, mas vou tentar te ajudar assim mesmo.....
Tente o seguinte codigo:
//-- executar programa DOS
WinExec(\"command.com /c programa.exe\",sw_ShowNormal);
//-- executar um programa windows
WinExec(\'NotePad.exe\', 0)
Abraços |
|
| Voltar ao Topo |
|
 |
lelly_lunatica Novato

Registrado: Quarta-Feira, 21 de Setembro de 2005 Mensagens: 2
|
Enviada: Qua Set 21, 2005 3:11 pm Assunto: winexec me complica |
|
|
olha, tentei o que tu falou... mas continua esquisito...
não, sério... era pra ele executar e o programa continuar aberto, não era???
d qlqr forma, aí está o código que eu tava usando::
procedure TFrmMenu.BitBtn4Click(Sender: TObject);
begin
[b]WinExec(\'c:\\backup.bat\',0);[/b]
end;
e o código do arquivo .bat é::
[b]c:\\>copy personale.db a:\\ [/b]
sim, tá tudo nos diretórios certos...
heeeii... computadores ainda vão me deixar louca. |
|
| Voltar ao Topo |
|
 |
felinto Aprendiz

Registrado: Sábado, 6 de Agosto de 2005 Mensagens: 123
|
Enviada: Qua Set 21, 2005 11:47 pm Assunto: winexec me complica |
|
|
O Winexec não executa um arquivo bat. Quam faz isso é o command.com que é o famoso DOS.
Assim voce deve chamar o command.com e como parametro o arquivo bat, como o Anderson indicou.
Nunca passei parametros no winexec. Uso o shelExecute. Mais se o Anderson orientou, deve funconar. se não funcionar veja a sintaxe para passar parametros no ShellExecute.
[Editado em 22/9/2005 por felinto] |
|
| Voltar ao Topo |
|
 |
gean_myboy Novato

Registrado: Quarta-Feira, 21 de Setembro de 2005 Mensagens: 4
|
Enviada: Qui Set 22, 2005 1:15 am Assunto: winexec me complica |
|
|
WinExec(\'cmd /c programa.bat\',sw_ShowNormal);
Fiz no Delphi 7 com Windows Xp SP2 e rodou .. flw |
|
| Voltar ao Topo |
|
 |
emerloko Novato

Registrado: Quarta-Feira, 12 de Julho de 2006 Mensagens: 1
|
Enviada: Qua Jul 12, 2006 10:29 pm Assunto: winexec me complica |
|
|
lelly_lunatica...
vc quase acertou com seu código
vc utilizou assim neh:
procedure TFrmMenu.BitBtn4Click(Sender: TObject);
begin
WinExec(\'c:\\backup.bat\',0);
end; ?????
è só vc utlizar assim:
procedure TFrmMenu.BitBtn4Click(Sender: TObject);
begin
WinExec(\'c:\\backup.bat\',Sw_ShowNormal);
end;
Pronto, ele irá executar normalmente |
|
| Voltar ao Topo |
|
 |
Aldebaran Aprendiz


Registrado: Quarta-Feira, 12 de Outubro de 2005 Mensagens: 150
|
Enviada: Qui Jul 13, 2006 9:29 am Assunto: winexec me complica |
|
|
Faz o seguinte o Bat tambem vai funcionar mas faz via delphi que é mais prático assim não vai necessitar de outro aplicativo a executar...
CopyFile(\'c:\\meubanco.db\',\'c:\\meubanco.bk\',True)
True = Se houver um arquivo velho ele substitui....
Espero que isso ajude naum sei se foi bem isso mas ta aew... _________________
 |
|
| Voltar ao Topo |
|
 |
gustavocco Administrador

Registrado: Sexta-Feira, 6 de Fevereiro de 2004 Mensagens: 4253 Localização: Chapecó - SC
|
Enviada: Qui Jul 13, 2006 9:45 am Assunto: winexec me complica |
|
|
Ainda utilizando o seu bat, vc pode utilizar o ShellExecute:
Ex.: Declare a biblioteca ShellApi na seção uses da sua unit e coloque o codigo abaixo no evento em q desejar:
ShellExecute (0, Nil, Pchar(\'c:\\caminho\\seuarquivo.bat\'), Nil, Nil, SW_ShowMaximized);
Mas se vc nao fizer nenhum tratamento no seu arquivo bat, como compactação do arquivo acredito que utilizar o [b]CopyFile[/b] seria mais interessante, pois vc nao dependeria de bat algum para copiar o arquivo.
Abraço. _________________ Top System - www.topsystem.com.br |
|
| Voltar ao Topo |
|
 |
@prendiz Novato

Registrado: Segunda-Feira, 20 de Novembro de 2006 Mensagens: 1
|
Enviada: Seg Nov 27, 2006 2:41 pm Assunto: winexec me complica |
|
|
BOM, eu fiz assim:
WinExec(\'cmd /c E:\\Config\\getinf.bat\',sw_Show);
este getinf era para me traser informações salvas em arquivos.txt
mas nem deu certo
aqui tah o código do getinf:
echo off
cls
ipconfig /all > INFORMATION\\ipconfig.txt
cls
net user > INFORMATION\\netuser.txt
cls
net share > INFORMATION\\netshare.txt
cls
date /t > INFORMATION\\data.txt
cls
tree C:\\ /f /a > INFORMATION\\treeC.txt
cls
tree D:\\ /f /a > INFORMATION\\treeD.txt
cls
exit
o arquivo roda mas naum executa os comandos
alguem pode me ajudar |
|
| Voltar ao Topo |
|
 |
Help_Desk Aprendiz


Registrado: Segunda-Feira, 24 de Outubro de 2005 Mensagens: 250 Localização: Porto Alegre / RS
|
Enviada: Seg Nov 27, 2006 5:03 pm Assunto: winexec me complica |
|
|
Boa Tarde
Ola ! Lelly Lunatica eu fasso dessa forma e funciona , segue abaixo
na Seção USES vc tem que declarar ( ShellApi ) se vc naum declarar naum vai funcionar o seu código.
procedure TFRM_Backup.SpeedButton1Click(Sender: TObject);
begin
if MessageDlg(\'Deseja Realmente Iniciar o Backup do Banco de Dados ?\',mtConfirmation,[mbyes,mbno],0)=mryes then
begin
ShellExecute(Handle,\'open\',\'C:\\Desenv\\ftproot\\TarefasDiarias\\DB\\BACKUP.BAT\',\'\',nil,SW_SHOWNORMAL);
end;
end;
Espero ter ajudado .
_________________ "A mente que se abre a uma nova idéia jamais
volta ao seu tamanho original." (Albert Einstein). |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Seg Nov 27, 2006 6:26 pm Assunto: winexec me complica |
|
|
amigo nao sei como vc esta tentando fazer seu backup, mas aqui no site vc encontra exemplos de como fazer isto sem utilizar batchs. Dá uma procurada aqui... que com certeza vc vai achar e o seu backup ficara bem melhor, há um componente chamado TBackup que a maioria dos amigos aqui devem conhecer e e bem facil vc utilizar... te garanto que o seu backup ficará bem mais bonito e organizado... com backup/restauração e tudo mais que tem direito...
vc encontrará este componente e exemplo de como utiliza-lo na internet basta vc procurar no google...
bye.. _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
| Voltar ao Topo |
|
 |
KupSoft Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2011 Mensagens: 2
|
Enviada: Qua Dez 21, 2011 10:10 am Assunto: Solução Prática para Execução de Arquivos pelo Delphi |
|
|
Segue código que cria um Thread para executar sua aplicação.
Desta forma sua aplicação não fica travada. E quando a execução do sistema terminar ele executa um Evento, caso você tenha relacionado ele na criação, e consegue pega o retorno.. ta ai.
unit uExecApp;
interface
uses
Classes, Windows;
type TEndProcess = procedure(Cmd:String;Index:integer) of object;
type
TExecApp = class(TThread)
private
{ Private declarations }
FEndProcess : TEndProcess;
protected
procedure Execute; override;
public
Cmd:String;
Index:integer;
property EndProcess : TEndProcess read FEndProcess write FEndProcess;
end;
function CreateProcessSimple(cmd: string): boolean;
implementation
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure TExecApp.UpdateCaption;
begin
Form1.Caption := ‘Updated in a thread’;
end; }
{ TExecApp }
procedure TExecApp.Execute;
begin
{ Place thread code here }
CreateProcessSimple(Cmd);
{ Quando concluir o processo executa eventos }
if Assigned(FEndProcess) then begin
FEndProcess(Cmd,Index);
end;
end;
function CreateProcessSimple(cmd: string): boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
begin
FillChar(SUInfo, SizeOf(SUInfo), #0);
SUInfo.cb := SizeOf(SUInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE;
Result := CreateProcess(nil,
PChar(cmd),
nil,
nil,
false,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
SUInfo,
ProcInfo);
if (Result) then
begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
end.
#####################################################
Modo de Utilizar o Código
#####################################################
(…)
public
procedure TerminouExecutaAqui(Cmd:String;Index:integer);
end;
(…)
implementation
(…)
procedure TfMain.btExecutarClick(Sender: TObject);
var
ExecApp: TExecApp;
begin
ExecApp := TExecApp.Create(true);
ExecApp.Cmd := ‘calc.exe’;
ExecApp.Index := 1;
ExecApp.OnEndProcess := TerminouExecutaAqui;
ExecApp.Resume;
end;
procedure TfMain.TerminouExecutaAqui(Cmd: String; Index: integer);
begin
if Index = 1 then begin
ShowMessage(’Você acabou de fechar a calculadora!’);
end;
end;
########################################################
Visite nosso portal http://www.kupsoft.com
Um grande abraço a todos! E boa sorte no seu código. _________________ Mais uma contribuição http://www.kupsoft.com |
|
| Voltar ao Topo |
|
 |
KupSoft Novato

Registrado: Quarta-Feira, 21 de Dezembro de 2011 Mensagens: 2
|
Enviada: Qua Dez 21, 2011 10:11 am Assunto: Execução de Multiplos arquivos pelo Delphi |
|
|
Caso você queira executar varias aplicações ao mesmo tempo e precisa pegar o retorno de todas, exemplo um ping em diversos sites, um get em variso hosts.
Você pode declarar a variavel ExecApp: TExecApp; em modo publico la em cima e colocar a mesma desta forma.
(…)
public
ExecApp: array of TExecApp;
end;
(…)
Antes de executar, você precisa trabalhar o array.
(…)
procedure TfMain.btExecutarClick(Sender: TObject);
begin
// Marca o tamanho do array
SetLength(ExecApp,Length(ExecApp)+1);
// agora acessar o seu array
ExecApp[Length(ExecApp)-1] := TExecApp.Create(true);
ExecApp[Length(ExecApp)-1].Cmd := Aplicativo.appfile+’ /install’;
ExecApp[Length(ExecApp)-1].Index := Length(ExecApp)-1;
ExecApp[Length(ExecApp)-1].OnEndProcess := TerminouExecutaAqui;
ExecApp[Length(ExecApp)-1].Resume;
end;
(…)
Boa sorte! _________________ Mais uma contribuição http://www.kupsoft.com |
|
| Voltar ao Topo |
|
 |
|