Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
cmd Komut Satırı sonucunu çekme
#1
Merhabalar 

Delphide cmd yi açıp bir komut girdirip sonucunu memo ya çekebilir miyiz?

Saygılarımla

   
Cevapla
#2
ChatGPT ye sizin sorunuzu sordum.

Aşağıda verdiği cevap var. Vaktiniz varsa deneyebilirsiniz.
uses
 System.SysUtils, System.Classes, Vcl.Forms, Vcl.StdCtrls, Vcl.Controls, Vcl.ExtCtrls, Windows;

procedure TForm1.ExecuteCommand(const Command: string);
var
 Security: TSecurityAttributes;
 ReadPipe, WritePipe: THandle;
 StartupInfo: TStartupInfo;
 ProcessInfo: TProcessInformation;
 Buffer: array[0..255] of AnsiChar;
 BytesRead: DWORD;
 CommandLine: string;
begin
 // Boru hatlarını ayarlama
 Security.nLength := SizeOf(Security);
 Security.bInheritHandle := True;
 Security.lpSecurityDescriptor := nil;

 // Okuma ve yazma boruları oluştur
 CreatePipe(ReadPipe, WritePipe, @Security, 0);
 SetHandleInformation(ReadPipe, HANDLE_FLAG_INHERIT, 0);

 // Başlatma bilgilerini ayarlama
 ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
 StartupInfo.cb := SizeOf(StartupInfo);
 StartupInfo.dwFlags := STARTF_USESTDHANDLES;
 StartupInfo.hStdOutput := WritePipe;
 StartupInfo.hStdError := WritePipe;

 // Komutu çalıştır
 CommandLine := 'cmd.exe /C ' + Command;
 if CreateProcess(nil, PAnsiChar(AnsiString(CommandLine)), nil, nil, True,
   CREATE_NO_WINDOW, nil, nil, StartupInfo, ProcessInfo) then
 begin
   // Yazma borusunu kapat
   CloseHandle(WritePipe);

   // Çıktıyı oku
   while ReadFile(ReadPipe, Buffer, SizeOf(Buffer), BytesRead, nil) do
   begin
     Buffer[BytesRead] := #0; // Sonlandırıcı ekle
     Memo1.Lines.Add(string(Buffer)); // Çıktıyı TMemo'ya ekle
   end;

   // Boru hatlarını kapat
   CloseHandle(ReadPipe);
   CloseHandle(ProcessInfo.hProcess);
   CloseHandle(ProcessInfo.hThread);
 end
 else
 begin
   Memo1.Lines.Add('Hata: ' + SysErrorMessage(GetLastError));
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear; // Önce memo'yu temizle
 ExecuteCommand('dir'); // Örnek komut
end;
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#3
Komut Satırından (CMD) Toplu İş Yaptırmak
Begin : = end / 2;
Cevapla
#4
(24-09-2024, Saat: 15:28)RAD Coder Adlı Kullanıcıdan Alıntı: Komut Satırından (CMD) Toplu İş Yaptırmak

Cevap için teşekkür ederim. Ama istediğim sonucu tam olarak şu konuda anlatılmış

https://www.delphican.com/showthread.php?tid=196
Cevapla
#5
uses
 ..., ShellAPI, Windows;

procedure TForm1.RunCommand;
var
 AProcess: TProcess;
 AStringList: TStringList;
begin
 AProcess := TProcess.Create(nil);
 AStringList := TStringList.Create;
 try
   AProcess.Executable := 'cmd.exe';
   AProcess.Parameters.Add('dir'); // komut buraya
   AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
   AProcess.Execute;
   AStringList.LoadFromStream(AProcess.Output);
   Memo1.Lines := AStringList;
 finally
   AProcess.Free;
   AStringList.Free;
 end;
end;

Deneyebilir misiniz?
Cevapla
#6
(24-09-2024, Saat: 15:46)Hayati Adlı Kullanıcıdan Alıntı:
uses
 ..., ShellAPI, Windows;

procedure TForm1.RunCommand;
var
 AProcess: TProcess;
 AStringList: TStringList;
begin
 AProcess := TProcess.Create(nil);
 AStringList := TStringList.Create;
 try
   AProcess.Executable := 'cmd.exe';
   AProcess.Parameters.Add('dir'); // komut buraya
   AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];
   AProcess.Execute;
   AStringList.LoadFromStream(AProcess.Output);
   Memo1.Lines := AStringList;
 finally
   AProcess.Free;
   AStringList.Free;
 end;
end;

Deneyebilir misiniz?

AProcess: TProcess; için uses satırı ne olmalı?
Cevapla
#7
delphi7 de sorunsuz çalışıyor...
uses
   ShellAPI;

procedure RunDosCommand(const ACommand: string; AMemo: TMemo);
var
 SecurityAttr: TSecurityAttributes;
 ReadPipe, WritePipe: THandle;
 StartupInfo: TStartupInfo;
 ProcessInfo: TProcessInformation;
 Buffer: array[0..255] of AnsiChar;
 BytesRead: DWORD;
 CommandLine: string;
begin
 // Güvenlik özniteliklerini ayarla
 ZeroMemory(@SecurityAttr, SizeOf(SecurityAttr));
 SecurityAttr.nLength := SizeOf(SecurityAttr);
 SecurityAttr.bInheritHandle := TRUE;

 // Pipe'ları oluştur
 if not CreatePipe(ReadPipe, WritePipe, @SecurityAttr, 0) then Exit;
 try
   ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
   StartupInfo.cb := SizeOf(StartupInfo);
   StartupInfo.hStdOutput := WritePipe;
   StartupInfo.hStdError := WritePipe;
   StartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow := SW_HIDE; // Komut penceresi görünmeyecek

   // Komut satırını hazırla
   CommandLine := 'cmd.exe /C ' + ACommand;

   // Yeni bir süreç (process) başlat
   if not CreateProcess(nil, PChar(CommandLine), nil, nil, TRUE, 0, nil, nil, StartupInfo, ProcessInfo) then
     Exit;

   // Süreç bitene kadar bekle
   WaitForSingleObject(ProcessInfo.hProcess, INFINITE);

   // Yazma pipesi artık gerekmediğinden kapat
   CloseHandle(WritePipe);

   // Pipe'dan veri oku ve Memo'ya ekle
   repeat
     ZeroMemory(@Buffer, SizeOf(Buffer));
     if ReadFile(ReadPipe, Buffer, SizeOf(Buffer) - 1, BytesRead, nil) and (BytesRead > 0) then
     begin
       Buffer[BytesRead] := #0; // Null-terminator ekle
       AMemo.Lines.Add(Buffer);
     end;
   until BytesRead = 0;

   // Süreci kapat
   CloseHandle(ProcessInfo.hProcess);
   CloseHandle(ProcessInfo.hThread);
 finally
   // Pipe'ları kapat
   CloseHandle(ReadPipe);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 // Edit1'deki komutu çalıştır ve sonuçları Memo1'e ekle
 RunDosCommand(Edit1.Text, Memo1);
end;
__________________________
From Now I will only Reading.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Kapandı : group by ile gruplanmış sorgu sonucunu tek satırda gösterme cinarbil 10 551 16-07-2024, Saat: 17:16
Son Yorum: cinarbil
  Delphi Sürekli Adı Değişen Excel Dosyasından Veri Çekme bünyamin68 2 855 05-10-2023, Saat: 12:50
Son Yorum: mcuyan
  Delphi ile Excelden Veri Tabanına Köprü Çekme bünyamin68 2 644 25-09-2023, Saat: 20:38
Son Yorum: bünyamin68
  Tanımlı yazıcı listesi çekme Bay_Y 2 572 25-09-2023, Saat: 17:03
Son Yorum: Bay_Y
  Webden kullanıcı bilgilerini çekme Husv 2 906 25-01-2023, Saat: 18:43
Son Yorum: Husv



Konuyu Okuyanlar: 1 Ziyaretçi