Gercek zamanlı doscommand aktarmada form donmaları

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
seci20

Gercek zamanlı doscommand aktarmada form donmaları

Mesaj gönderen seci20 »

ustalarım merhaba,verdiğim komutları gercek zamanlı olarak memoya aktarmaya calısıyorum bunu başarıyorumda şu kod ile...

Kod: Tümünü seç

procedure CaptureConsoleOutput(const ACommand, AParameters: String; AMemo: TMemo);
 const
   CReadBuffer = 2400;
 var
   saSecurity: TSecurityAttributes;
   hRead: THandle;
   hWrite: THandle;
   suiStartup: TStartupInfo;
   piProcess: TProcessInformation;
   pBuffer: array[0..CReadBuffer] of AnsiChar;
   dRead: DWord;
   dRunning: DWord;
 begin
   saSecurity.nLength := SizeOf(TSecurityAttributes);
   saSecurity.bInheritHandle := True;
   saSecurity.lpSecurityDescriptor := nil;

   if CreatePipe(hRead, hWrite, @saSecurity, 0) then
   begin
     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
     begin
       repeat
         dRunning  := WaitForSingleObject(piProcess.hProcess, 100);
         Application.ProcessMessages();
         repeat
           dRead := 0;
           ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);
           pBuffer[dRead] := #0;

           OemToAnsi(pBuffer, pBuffer);
           AMemo.Lines.Add(String(pBuffer));
         until (dRead < CReadBuffer);
       until (dRunning <> WAIT_TIMEOUT);
       CloseHandle(piProcess.hProcess);
       CloseHandle(piProcess.hThread);
     end;

     CloseHandle(hRead);
     CloseHandle(hWrite);
   end;
end;
yanlız bu kodda çok fazla donmalar meydana gelıyor o yüzden bu eklentiyi kullanayım diyorum ama bundada veri kaybı oluyor yanı yarım yamalak aktarıyor memoya yazıları...

dediğim eklenti şu...

https://github.com/TurboPack/DOSCommand


aslında ilk procedure çok harika çalışıyor ama gel gelelımkı cok fazla formda donmalar meydana gelıyor...bu arada komut verdıgım programlarda fastboot yada adb oluyor formda donmasını nasıl engellıyebılırım ? doscommand pas inceledım ama tam anlıyamadım yardımcı olan ustalarıma sımdıden cok tesekkur ederım...
seci20

Re: Gercek zamanlı doscommand aktarmada form donmaları

Mesaj gönderen seci20 »

ustalarım sorunu cozmus bulunmaktadım daha once g.arkas hocam sorunun cozumunu vermıstı mantık aynı mantık kodlar farklı sadece


viewtopic.php?f=2&t=35046&p=189169#p189169
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Gercek zamanlı doscommand aktarmada form donmaları

Mesaj gönderen G.Arkas »

seci20 yazdı:ustalarım sorunu cozmus bulunmaktadım daha once g.arkas hocam sorunun cozumunu vermıstı mantık aynı mantık kodlar farklı sadece


viewtopic.php?f=2&t=35046&p=189169#p189169
Merhaba,

Kodu iyi incele orada küçük bir detay var. :wink:

Kod: Tümünü seç

procedure CmdxCx(p:pointer);stdcall;
Resim
seci20

Re: Gercek zamanlı doscommand aktarmada form donmaları

Mesaj gönderen seci20 »

G.Arkas yazdı:
seci20 yazdı:ustalarım sorunu cozmus bulunmaktadım daha once g.arkas hocam sorunun cozumunu vermıstı mantık aynı mantık kodlar farklı sadece


viewtopic.php?f=2&t=35046&p=189169#p189169
Merhaba,

Kodu iyi incele orada küçük bir detay var. :wink:

Kod: Tümünü seç

procedure CmdxCx(p:pointer);stdcall;
ona gore düzenledim zaten hocam capture connsoledekı değişkenleri tanımladım genel olarak sonra cmdbenımgonderıcıme uygun ayarlardım suan cok harıka calısıyor kodlar tekrardan cok tesekkur ederım :)
Cevapla