±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 ¸í·ÉÇà °á°ú¸¦ À©µµ(¸Þ¸ð)·Î ³ªÅ¸³»±â.
±è½ÃÁØ
(±è½ÃÁØ)
2015-11-05 ¿ÀÈÄ 2:19:49
Ä«Å×°í¸®: ÆÁ
4072ȸ Á¶È¸



÷ºÎÆÄÀÏ ´Ù¿î·Îµå
Project4.zip
¸í·ÉÇà °á°ú¸¦ À©µµ(¸Þ¸ð)·Î ³ªÅ¸³ª°Ô Çϴ ¹æ¹ýÀÔ´Ï´Ù.
Áï, ipconfigÀÇ °á°ú¸¦ Memo·Î º¸ÀÌ°Ô Çϴ ¹æ¹ýÀÔ´Ï´Ù.

ÆÄÀ̾î¹öµåÀÇ ¹é¾÷(gbak.exe)À» À©µµ·Î º¸¿©ÁÙ ¶§ »ç¿ëÇÏ°í Àִµ¥ ´Ù¸¥ ¿ëµµ·Îµµ È°¿ëÀÌ °¡´ÉÇÒ °Í °°½À´Ï´Ù....


unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TArg<T> = reference to procedure(const Arg: T);

  TForm4 = class(TForm)
    Memo: TMemo;
    Panel1: TPanel;
    Label1: TLabel;
    edCommand: TEdit;
    btnExecCmd: TButton;
    procedure btnExecCmdClick(Sender: TObject);
    procedure edCommandKeyPress(Sender: TObject; var Key: Char);
  private
    procedure CaptureConsoleOutput(const ACommand: String;
      CallBack: TArg<PAnsiChar>);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.CaptureConsoleOutput(const ACommand: String; CallBack: TArg<PAnsiChar>);
const
  CReadBuffer = 2400;
var
   saSecurity: TSecurityAttributes;
   hRead: THandle;
   hWrite: THandle;
   suiStartup: TStartupInfo;
   piProcess: TProcessInformation;
   pBuffer: array [0..CReadBuffer] of AnsiChar;
   dBuffer: array [0..CReadBuffer] of AnsiChar;
   dRead: DWORD;
   dRunning: DWORD;
   dAvailable: DWORD;
 begin
   saSecurity.nLength := SizeOf(TSecurityAttributes);
   saSecurity.bInheritHandle := true;
   saSecurity.lpSecurityDescriptor := nil;
   if CreatePipe(hRead, hWrite, @saSecurity, 0) then
     try
       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), @saSecurity, @saSecurity, true, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup,
         piProcess) then
         try
           repeat
             dRunning := WaitForSingleObject(piProcess.hProcess, 100);
             PeekNamedPipe(hRead, nil, 0, nil, @dAvailable, nil);
             if (dAvailable > 0) then
               repeat
                 dRead := 0;
                 ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);
                 pBuffer[dRead] := #0;
                 OemToCharA(pBuffer, dBuffer);
                 CallBack(dBuffer);
               until (dRead < CReadBuffer);
             Application.ProcessMessages;
           until (dRunning <> WAIT_TIMEOUT);
         finally
             CloseHandle(piProcess.hProcess);
             CloseHandle(piProcess.hThread);
         end;
     finally
         CloseHandle(hRead);
         CloseHandle(hWrite);
     end;
end;

procedure TForm4.edCommandKeyPress(Sender: TObject; var Key: Char);
begin
    if Key = #13 then
    begin
        btnExecCmd.SetFocus;
        Key := #0;
    end;
end;

procedure TForm4.btnExecCmdClick(Sender: TObject);
begin
    Memo.Lines.Clear;

    CaptureConsoleOutput(edCommand.Text,
        procedure(const Line: PAnsiChar)
        begin
            Memo.Lines.Add(String(Line));
        end);
end;

end.


// ¼Ò¶õÄÚ´õ´ÔÀÇ ÁöÀû¿¡ µû¶ó ¼Ò½º¸¦ ´Ù½Ã ¿Ã·È½À´Ï´Ù.