24-09-2024, Saat: 14:59
Merhabalar
Delphide cmd yi açıp bir komut girdirip sonucunu memo ya çekebilir miyiz?
Saygılarımla
Delphide cmd yi açıp bir komut girdirip sonucunu memo ya çekebilir miyiz?
Saygılarımla
|
cmd Komut Satırı sonucunu çekme
|
|
24-09-2024, Saat: 14:59
Merhabalar
Delphide cmd yi açıp bir komut girdirip sonucunu memo ya çekebilir miyiz? Saygılarımla
24-09-2024, Saat: 15:19
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
24-09-2024, Saat: 15:29
(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
24-09-2024, Saat: 15:46
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?
24-09-2024, Saat: 16:46
(24-09-2024, Saat: 15:46)Hayati Adlı Kullanıcıdan Alıntı:uses ..., ShellAPI, Windows; AProcess: TProcess; için uses satırı ne olmalı?
25-09-2024, Saat: 08:39
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. |
|
« Önceki Konu | Sonraki Konu »
|
| Konu ile Alakalı Benzer Konular | |||||
| Konular | Yazar | Yorumlar | Okunma | Son Yorum | |
| wsdl veri çekme hatası | tuna | 6 | 1.400 |
15-01-2025, Saat: 16:54 Son Yorum: hi_selamlar |
|
| Kapandı : group by ile gruplanmış sorgu sonucunu tek satırda gösterme | cinarbil | 10 | 1.660 |
16-07-2024, Saat: 17:16 Son Yorum: cinarbil |
|
| Delphi Sürekli Adı Değişen Excel Dosyasından Veri Çekme | bünyamin68 | 2 | 1.387 |
05-10-2023, Saat: 12:50 Son Yorum: mcuyan |
|
| Delphi ile Excelden Veri Tabanına Köprü Çekme | bünyamin68 | 2 | 1.040 |
25-09-2023, Saat: 20:38 Son Yorum: bünyamin68 |
|
| Tanımlı yazıcı listesi çekme | Bay_Y | 2 | 1.061 |
25-09-2023, Saat: 17:03 Son Yorum: Bay_Y |
|