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 | |
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 |