Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, á mais de uma hora e meia estou pesquisando como abrir um arquivo .bat dentro de um panel, form ou qualquer elemento.
Tenho 3 arquivos .bat e gostaria de monstra-los dentro do meu form.
Qualquer ideia é bem vinda!
Abraços.
Se tiver como eu rodar o .bat em background pegando apenas suas informações ja estaria de bom tamanho!
Por exemplo, no form tenho um panel e tenho o .bat externo chamado arquivo.bat, preciso OU abrir a janeça do dos no meu form, ou pegar as informações do .bat e transferilas para o panel.
Estou achando que em Delphi isso não será possível mas qualquer ajuda é bem vinda!
Abraços.
Como está chamando o .BAT?
Parecido com isso ?
system('aaa.bat');
Tente assim
system('aaa.bat > C:\outbat.txt');E veja o conteúdo do outbat.txt.
De uma olhada no link que ta no outro post, não te server ?
Estou usando WinExec com SW_HIDE não entendi muito bem como usar o que você postou.
poderia ser assim +/-: http://img15.imageshack.us/i/25254764.png/
Obrigado.
Acho que dese jeito não tem como.
Não sei se no Delphi tem o system, pra executa comandos do DOS, mas voce iria abrir o BAT e exportar todas as saídas para um arquivo TXT.
Tenta desse jeito:
{http://delphi.about.com/cs/adptips2001/a/bltip0201_2.htm}
procedure TForm1.Button1Click(Sender: TObject);
begin {button 1 code}
RunDosInMemo('C:\Arquivo.BAT',Memo1);
end;
procedure RunDosInMemo(DosApp:String;AMemo:TMemo);
const
ReadBuffer = 2400;
var
Security : TSecurityAttributes;
ReadPipe,WritePipe : THandle;
start : TStartUpInfo;
ProcessInfo : TProcessInformation;
Buffer : Pchar;
BytesRead : DWord;
Apprunning : DWord;
begin
With Security do begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
lpsecuritydescriptor := nil;
end;
if Createpipe (ReadPipe, WritePipe,
@Security, 0) then begin
Buffer := AllocMem(ReadBuffer + 1);
FillChar(Start,Sizeof(Start),#0);
start.cb := SizeOf(start);
start.hStdOutput := WritePipe;
start.hStdInput := ReadPipe;
start.dwFlags := STARTF_USESTDHANDLES +
STARTF_USESHOWWINDOW;
start.wShowWindow := SW_HIDE;
if CreateProcess(nil,
PChar(DosApp),
@Security,
@Security,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
start,
ProcessInfo)
then
begin
repeat
Apprunning := WaitForSingleObject
(ProcessInfo.hProcess,100);
Application.ProcessMessages;
until (Apprunning <> WAIT_TIMEOUT);
Repeat
BytesRead := 0;
ReadFile(ReadPipe,Buffer[0],
ReadBuffer,BytesRead,nil);
Buffer[BytesRead]:= #0;
OemToAnsi(Buffer,Buffer);
AMemo.Text := AMemo.text + String(Buffer);
until (BytesRead < ReadBuffer);
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ReadPipe);
CloseHandle(WritePipe);
end;
end;Vou testar o código, da uma olhada nesse link: removido
Eita, o programa que te mostrei pelo link é em VB(seguindo você mesmo =D), vou ter que fazer em VB oras!
Obrigado pela ajuda, mas se alguém ai conseguir em Delphi por favor não deixe de postar!
Abraços e obrigado pela ajuda.
Vou dar um olhada em Java tambem
Por que você precisa colocar o DOS na janela ?
Esse arquivo exibe relatórios sobre alguns procedimentos.
As veses o utilizador precisa corrigir algum erro, e então está ali para ele na tela.
Obrigado.
Cara. acho que isso vai t ajudar
cria um panel ai.. coloca um botão e cola esse código no evento OnClick do botão
windows.SetParent( FindWindow( nil, 'C:\WINDOWS\System32\cmd.exe' ), panel1.handle );
agora siga os passos
->rode o seu programa
->rode o seu ".bat"
->agora clique no botão na sua aplicação.
:D .. essa função vai colocar a janela do DOS dentro do panel que você colocou na sua aplicação, faça ai e veja o que acontece.. maximize, minimize, veja como a janela do DOS passa a residir dentro do seu panel... ela inclusive sai da barra de tarefas do windows
: D
espero que ajude cara.. qualquer coisa a mais : tonello.rafinha@gmail.com
Você quer que o conteúdo bat fique no Panel ou os resultados do panel fiquem no panel ?
Se for o segundo, olha aqui. Já precisei fazer isso só que em C++Builder.
Abraços!