Sabtu, 14 Mei 2011

Command Prompt di delphi

Command Prompt di delphi            

             Pada tutorial singkat ini saya coba bagi-bagi sedikit info. Masih berhubngan dengan delphi. Pada contoh program ini saya bikin aplikasi command prompt di visual Delphi. Sederhananya saya hanya mengambil informasi yang dihasilkan perintah dalam DOS. Misal kita ketik help di command prompt maka akan di hasilkan perintah-perintah help di layar command prompt... Nah perintah-perintah itu yang nantinya ditampilkan didelphi dengan bantuan komponen Memo. Bingung? Apa yang mau diketik lagi, langsung aja deh saya sertakan routinnya..
             Pertama siapkan beberapa komponen diantarnya:

1. Button
2. Edit
3. Memo

         Ini routin lengkapnya :
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, ZConnection, StdCtrls, ExtCtrls, SUIForm, SUITitleBar, DBCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.GetDosOutput(CommandLine, Work: string): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  WorkDir: string;
  Handlee: 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;
    Handlee := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                            nil, nil, True, 0, nil,
                            PChar(WorkDir), SI, PI);
    CloseHandle(StdOutPipeWrite);
    if Handlee 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;

procedure TForm1.Button1Click(Sender: TObject);
begin
     memo1.Text:=GetDosOutput(edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     close;
end;

end.

Nah ini dia hasilnya..


           Tutorial nanti yang akan saya posting gimana caranya bikin aplikasi PING IP dalam suatu jaringan, sehingga kita bisa tahu IP tersebut terkoneksi dalam jaringan..

Share/Bookmark

1 komentar:

Unknown mengatakan...

cara nambahin usesnya gmna aya? kok saya eror terus ..

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More