Konuyu Oyla:
  • Derecelendirme: 3/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi ile cmd komut göndermek ve yanıt almak
#1
Merhaba,

Nette rastladığım faydalı olabileceğini düşündüğüm bir fonksiyon...


function GetCommand(CommandLine: string): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  WorkDir: string;
  Handle: Boolean;
begin
  Result := '';
  with SA do begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE);
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
    WorkDir := GetCurrentDir;
    Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                            nil, nil, True, 0, nil,
                            PChar(WorkDir), SI, PI);
    CloseHandle(StdOutPipeWrite);
    if Handle then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
    CloseHandle(StdOutPipeRead);
  end;
end;

WWW
Cevapla
#2
Merhaba,
Paylaşım için teşekkür ederim. 
Delphi 10 Seattle ve Delphi 10.1 Berlin sürümlerinde test etme imkanınız oldu mu?

Gördüğüm kadarıyla fonksiyon, gönderilen komutun sonucunu da geri döndürüyor.
Bu özellik sayesinde gönderilen komutun, doğru çalışıp çalışmadığının kontrolü açısından son derece kullanışlı olacaktır.
DelphiCan'dır!
Cevapla
#3
Daha önce kullandım ve sıkıntı yaşamadım. 

Kullandığımda ufak bir fark var :

function GetDosOutput(CommandLine: string; Work: string = 'C:\'): AnsiString;
var
 SA: TSecurityAttributes;
 SI: TStartupInfo;
 PI: TProcessInformation;
 StdOutPipeRead, StdOutPipeWrite: THandle;
 WasOK: Boolean;
 Buffer: array[0..255] of ansiChar;
 BytesRead: Cardinal;
 WorkDir: String;
 Handle: Boolean;
begin
 Result := '';
 with SA do begin
   nLength := SizeOf(SA);
   bInheritHandle := True;
   lpSecurityDescriptor := nil;
 end;
 CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
 try
   with SI do
   begin
     FillChar(SI, SizeOf(SI), 0);
     cb := SizeOf(SI);
     dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
     wShowWindow := SW_HIDE;
     hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
     hStdOutput := StdOutPipeWrite;
     hStdError := StdOutPipeWrite;
   end;
   WorkDir := Work;
   Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                           nil, nil, True, 0, nil,
                           PChar(WorkDir), SI, PI);
   CloseHandle(StdOutPipeWrite);
   if Handle then
     try
       repeat
         WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
         if BytesRead > 0 then
         begin
           Buffer[BytesRead] := #0;
           Result := Result + Buffer;
         end;
       until not WasOK or (BytesRead = 0);
       WaitForSingleObject(PI.hProcess, INFINITE);
     finally
       CloseHandle(PI.hThread);
       CloseHandle(PI.hProcess);
     end;
 finally
   CloseHandle(StdOutPipeRead);
 end;
end;
Cevapla
#4
(16-09-2016, Saat: 19:47)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Paylaşım için teşekkür ederim. 
Delphi 10 Seattle ve Delphi 10.1 Berlin sürümlerinde test etme imkanınız oldu mu?

Gördüğüm kadarıyla fonksiyon, gönderilen komutun sonucunu da geri döndürüyor.
Bu özellik sayesinde gönderilen komutun, doğru çalışıp çalışmadığının kontrolü açısından son derece kullanışlı olacaktır.

Delphi 10 Seattle da kullandım sıkıntı yok Wink

(16-09-2016, Saat: 21:02)engerex Adlı Kullanıcıdan Alıntı: Daha önce kullandım ve sıkıntı yaşamadım. 

Kullandığımda ufak bir fark var :


Hiç fark yok aynısı Wink Adı değişmiş
WWW
Cevapla
#5
Merhaba,
Bu konu ile ilgili bir makalemi paylaşmak istiyorum.
Komut Satırından (CMD) Toplu İş Yaptırmak
DelphiCan'dır!
Cevapla
#6
Zamanın birinde değerli bir arkadaşım için yapmıştım böyle birşey.Ekte derlenmiş hali ve kodlarını bulabilirsiniz.


Ek Dosyalar
.zip   zug.zip (Dosya Boyutu: 2,63 KB / İndirme Sayısı: 77)
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla
#7
(18-09-2016, Saat: 00:18)QuAdR Adlı Kullanıcıdan Alıntı: Zamanın birinde değerli bir arkadaşım için yapmıştım böyle birşey.Ekte derlenmiş hali ve kodlarını bulabilirsiniz.

Component kullanılmadan yapılmış ve çok da hızlı çalışıyor. 
Teşekkür ederim hocam.
DelphiCan'dır!
Cevapla
#8
(18-09-2016, Saat: 00:18)QuAdR Adlı Kullanıcıdan Alıntı: Zamanın birinde değerli bir arkadaşım için yapmıştım böyle birşey.Ekte derlenmiş hali ve kodlarını bulabilirsiniz.

Kaynak kod için linke girince "Belirtilen ek dosya forumumuzda mevcut değil." diye hata mesajı veriyor. Linki yenileme imkanınız varmı?
Cevapla
#9
(18-09-2016, Saat: 00:18)QuAdR Adlı Kullanıcıdan Alıntı: Zamanın birinde değerli bir arkadaşım için yapmıştım böyle birşey.Ekte derlenmiş hali ve kodlarını bulabilirsiniz.

Ek mevcut değil yenilermisiniz ?
WWW
Cevapla
#10
Güncel...
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...





Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 687 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 567 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 390 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.384 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 2.049 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi