Sekarang akan saya coba membuat postingan masih dalam tutorial delphi bagaimana supaya agar kita bisa mengcapture dari console windows tampil dalam memo.Sebenarnya ada beberapa cara untuk mengcapture console ke memo bisa dengan menggunakan komponen yang dinamakan DosCommand,bisa dengan membuat suatu procedure dan juga bisa dengan cara membuat function.Pada kali ini saya akan mencoba membuatnya dengan suatu procedure,dan mungkin nanti saya akan coba juga dengan menggunakan function dan komponen doscommand.Tentunya cara dari ketiga macam tersebut diatas mempunyai kelebihan dan kekurangan masing-masing.
Langkah Untuk Capture Console Ke Memo
Baiklah saya akan langsung mencobanya,yang pertama kita buka aplikasi delphinya dan saya coba tambahkan komponen pada Form tersebut:
1.Memo.
2.Editbox.
3.Button.
saya buat posisi nya dalam Form dari masing-masing komponen seperti gambar di bawah ini.
![]() |
Posisi komponen pada Form baru |
Kemudian setelah kita letakan posisi komponen pada Form kita ganti untuk caption Button dengan RUN dan setelah itu langsung menuju pada kode editornya kita buat procedurenya untuk capture console terlebih dahulu, dimana procedure nya adalah sebagai berikut:
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 Char;
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;
Letakan procedure tersebut dibawah implementation
![]() |
Penempatan Procedure pada delphi |
Setelah kita buat procedure tersebut diatas kemudian pada Form klik button 2 kali untuk membuat procedure Button,yang mana procedure ini akan mengeksekusi perintah yang ada pada editbox dan hasilnya akan ditampilkan pada Memo,dan untuk procedure nya seperti ini
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
CaptureConsoleOutput(Edit1.Text, Edit2.Text, Form1.Memo1);
end;
Setelah kita buat procedure nya kita coba run atau tekan F9 dan coba kita test dengan perintah route PRINT
![]() |
Test Run Capture Console |
Demikianlah cara capture console dengan menggunakan procedure, silahkan kembangkan lagi semoga bermanfa'at.Lain waktu saya akan coba dengan menggunakan function untuk capture consolenya.
Happy Coding.
No comments:
Post a Comment