cmd okuma sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
cmd okuma sorunu
ustalarım merhaba uzun süredir çözüm aradığım ama bir türlü çözüme ulaştıramadığım bir konu var.Sorunum şu elimde bir kaç tane exe var bunlar console aplication normal şartlarda cmd çalıştırdığımda ekranda sorunsuz şekilde çıktıları alıyorum.Ama bunu kendi projeme aktarmaya çalıştığımda exe işlemi bitene kadar ekrana aktarmıyor.Yani gerçek zamanlı aktarma olmuyor.İnternetteki çoğu foksiyonu denedim ama malasef olmuyor.
Programın bir tanesi şu.
http://spdflashtool.com/wp-content/uplo ... 0.0001.zip
çalıştırıldığında bu şekilde cmdden çıktı alabiliyorum
ama bunu delphide yapmaya kalktığımda ancak işlem bitip exe kapandığında tüm çıktıyı veriyor.
İnternette denediğim bir kaç foksiyon şunlar
http://delphi.wikia.com/wiki/Capture_Co ... me_To_Memo
http://stackoverflow.com/questions/9119 ... delphi-app
http://thundaxsoftware.blogspot.com.tr/ ... elphi.html
malasefki hiç biri gerçek zamanlı aktarmıyor.Ancak işlem bittikten sonra ekrana yazdırıyor.Yardımlarınız için şimdiden çok teşekkür ederim...
Programın bir tanesi şu.
http://spdflashtool.com/wp-content/uplo ... 0.0001.zip
çalıştırıldığında bu şekilde cmdden çıktı alabiliyorum
ama bunu delphide yapmaya kalktığımda ancak işlem bitip exe kapandığında tüm çıktıyı veriyor.
İnternette denediğim bir kaç foksiyon şunlar
http://delphi.wikia.com/wiki/Capture_Co ... me_To_Memo
http://stackoverflow.com/questions/9119 ... delphi-app
http://thundaxsoftware.blogspot.com.tr/ ... elphi.html
malasefki hiç biri gerçek zamanlı aktarmıyor.Ancak işlem bittikten sonra ekrana yazdırıyor.Yardımlarınız için şimdiden çok teşekkür ederim...
Re: cmd okuma sorunu
Merhaba,
Daha önce buna benzer bir sorunuzu cevaplamıştım diye hatırlıyorum. Aşağdaki linkteki uygulama işinizi görmedi mi?
viewtopic.php?f=2&t=36022&p=194406&hilit=komut#p194487
Daha önce buna benzer bir sorunuzu cevaplamıştım diye hatırlıyorum. Aşağdaki linkteki uygulama işinizi görmedi mi?
viewtopic.php?f=2&t=36022&p=194406&hilit=komut#p194487
Re: cmd okuma sorunu
hocam cevap verdiğiniz için çok teşekkür ederim ama oda aynı şekilde diğerleri gibi aktarmıyor aktarmada sorun yaşıyor.ertank yazdı:Merhaba,
Daha önce buna benzer bir sorunuzu cevaplamıştım diye hatırlıyorum. Aşağdaki linkteki uygulama işinizi görmedi mi?
viewtopic.php?f=2&t=36022&p=194406&hilit=komut#p194487
Re: cmd okuma sorunu
Uygulama anlık olarak DOS komut ekranına gelen bilgiyi gösterir. Uygulama açıldığı zaman Start butonunu tıklayıp komut olarak
yazdığınız ve ENTER tuşuna bastığınız zaman (veya Execute butonunu tıkladığınızda) ekrandan geçen dosya listesini anlık görebilirsiniz.
Eğer kullandığınız uygulama komut satırından çalıştırıldığı zaman anlık olarak ekrana bilgi vermiyor ise zaten o bilgiyi istediğiniz hızda elde edemezsiniz.
Kod: Tümünü seç
dir C:\ /s
Eğer kullandığınız uygulama komut satırından çalıştırıldığı zaman anlık olarak ekrana bilgi vermiyor ise zaten o bilgiyi istediğiniz hızda elde edemezsiniz.
Re: cmd okuma sorunu
hocam bende öyle düşündüm yanlız cmd ekranına sorunsuz aktarıyor.Yani cmdden programı çalıştırdığımda ekrana sorunsuz şekilde aktariyor delphide çalıştırdığımda delphiye aktarmıyor.ertank yazdı:Uygulama anlık olarak DOS komut ekranına gelen bilgiyi gösterir. Uygulama açıldığı zaman Start butonunu tıklayıp komut olarakyazdığınız ve ENTER tuşuna bastığınız zaman (veya Execute butonunu tıkladığınızda) ekrandan geçen dosya listesini anlık görebilirsiniz.Kod: Tümünü seç
dir C:\ /s
Eğer kullandığınız uygulama komut satırından çalıştırıldığı zaman anlık olarak ekrana bilgi vermiyor ise zaten o bilgiyi istediğiniz hızda elde edemezsiniz.
Re: cmd okuma sorunu
İlgili kodunuzun tamamını paylaşabilir misiniz?
Re: cmd okuma sorunu
Kod: Tümünü seç
procedure readback(const ACommand, AParameters: String;
CallBack: TArg<PAnsiChar>);
const
CReadBuffer = 2400;
var
saSecurity: TSecurityAttributes;
hRead: THandle;
hWrite: THandle;
suiStartup: TStartupInfo;
piProcess: TProcessInformation;
pBuffer: array [0 .. CReadBuffer] of AnsiChar;
dBuffer: array [0 .. CReadBuffer] of AnsiChar;
dRead: DWord;
dRunning: DWord;
dAvailable: DWord;
begin
saSecurity.nLength := SizeOf(TSecurityAttributes);
saSecurity.bInheritHandle := true;
saSecurity.lpSecurityDescriptor := nil;
if CreatePipe(hRead, hWrite, @saSecurity, 0) then
try
FillChar(suiStartup, SizeOf(TStartupInfo), #0);
suiStartup.cb := SizeOf(TStartupInfo);
suiStartup.hStdInput := hRead;
suiStartup.hStdOutput := hWrite;
suiStartup.hStdError := hWrite;
suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
suiStartup.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(ACommand + ' ' + AParameters), @saSecurity,
@saSecurity, true, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup,
piProcess) then
try
repeat
dRunning := WaitForSingleObject(piProcess.hProcess, 100);
PeekNamedPipe(hRead, nil, 0, nil, @dAvailable, nil);
if (dAvailable > 0) then
repeat
dRead := 0;
ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);
pBuffer[dRead] := #0;
OemToCharA(pBuffer, dBuffer);
CallBack(dBuffer);
until (dRead < CReadBuffer);
Application.ProcessMessages;
until (dRunning <> WAIT_TIMEOUT);
finally
CloseHandle(piProcess.hProcess);
CloseHandle(piProcess.hThread);
end;
finally
CloseHandle(hRead);
CloseHandle(hWrite);
end;
end;
procedure progwrmem(const Line: PAnsiChar);
var
str: string;
ok:Boolean;
i,x: integer;
begin
str := String(Line);
Form2.memo1.Lines.Add(str);
end;
function flsreadback(Command: string): Boolean;
begin
Result := true;
Screen.Cursor:=crHourGlass;
try
readback(Command, '', progwrmem);
finally
Result := false;
end;
end;
kodum şu şekilde hocam.Bunun yanı sıra sizin verdiğiniz kodda aynı şekilde ekrana aktarmıyor.Doscommand kompenantını denedım oda aynı sekılde aktarmıyor hocam.
Re: cmd okuma sorunu
DOS komutu olarak çalıştırdığınız uygulamayı test için paylaşabilir misiniz?
Re: cmd okuma sorunu
buyrun hocamertank yazdı:DOS komutu olarak çalıştırdığınız uygulamayı test için paylaşabilir misiniz?
http://dosya.co/fx064w4z4rhd/SPD_Upgrad ... 1.rar.html
içindeki CmdDloader.exe komutuda şu şekilde verebilirsiniz...
Kod: Tümünü seç
CmdDloader -pac 1.pac -port 5
Re: cmd okuma sorunu
Ben kullanmıyorum. Eğer sizde yüklü ise Jedi kütüphanesi ile aşağıdaki gibi bir deneme yapabilir misiniz? TJvCreateProcess bileşenini kullanmanız gerekiyor.
Aşağıdaki parametreleri ayarlamanız gerekli:
Kod: Tümünü seç
procedure TForm1.ButtonRunClick(Sender: TObject);
begin
JvCreateProcess1.Run();
end;
procedure TForm1.ButtonTerminateClick(Sender: TObject);
begin
JvCreateProcess1.Terminate();
end;
procedure TForm1.JvCreateProcess1Read(Sender: TObject; const S: string;
const StartsOnNewLine: Boolean);
begin
Memo1.Lines.Add(S);
end;
procedure TForm1.JvCreateProcess1Terminate(Sender: TObject; ExitCode: Cardinal);
begin
Memo1.Lines.Add('done');
end;
Kod: Tümünü seç
CommandLine = 'C:\Windows\System32\cmd.exe'
StartupInfo.DefaultSize = False
ConsoleOptions = [coOwnerData, coRedirect]
OnTerminate = JvCreateProcess1Terminate
OnRead = JvCreateProcess1Read
Re: cmd okuma sorunu
hocam ekledim yaptım aynı şekilde ekrana aktarma yapmıyor.İşlem arkaplanda devam ediyor gene...
Re: cmd okuma sorunu
Uygulama stdout yerine stderr çıktısı gönderiyor. DOS komut isteminde stdout ve stderr her ikisi de ekrana gösterilir. Uygulama başka bir uygulamayı çağırır iken bu böyle olmaz. Normalde sadece stdout bilgisi okunur.
Aşağıdaki kod sonunda dosya içi boş oluyor.
Aşağıdaki kod sonrasında dosya içine bilgiler geliyor.
Stderr üzerinden bilgi okuma ile ilgili bir çözüme ulaşırsam burada paylaşırım.
Aşağıdaki kod sonunda dosya içi boş oluyor.
Kod: Tümünü seç
CmdDloader -pac 1.pac -port 5 > test.txt
Kod: Tümünü seç
CmdDloader -pac 1.pac -port 5 > test.txt 2>&1
Re: cmd okuma sorunu
tamam hocam ALLAH razı olsun bekliyorum.ertank yazdı:Uygulama stdout yerine stderr çıktısı gönderiyor. DOS komut isteminde stdout ve stderr her ikisi de ekrana gösterilir. Uygulama başka bir uygulamayı çağırır iken bu böyle olmaz. Normalde sadece stdout bilgisi okunur.
Aşağıdaki kod sonunda dosya içi boş oluyor.Aşağıdaki kod sonrasında dosya içine bilgiler geliyor.Kod: Tümünü seç
CmdDloader -pac 1.pac -port 5 > test.txt
Stderr üzerinden bilgi okuma ile ilgili bir çözüme ulaşırsam burada paylaşırım.Kod: Tümünü seç
CmdDloader -pac 1.pac -port 5 > test.txt 2>&1