0
点赞
收藏
分享

微信扫一扫

MY_console


program MY_console;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, shellapi;
var
  ReadOut, WriteOut, ReadIn, WriteIn: THandle;
  ProcessInfo: TProcessInformation;
  Security: TSecurityAttributes;
  StartUpInfo: TStartUpInfo;
  s: string;

label
  start;
//----------------------------------------------------读取管道

function ReadFromPipe(Pipe: THandle): string;
var
  Buffer: PChar;
  BytesRead: DWord;
  ReadBuffer: Cardinal;
begin
  Result := '';
  if GetFileSize(Pipe, nil) = 0 then Exit;

  Buffer := AllocMem(ReadBuffer + 1);
  repeat
    BytesRead := 0;
    ReadFile(Pipe, Buffer[0], ReadBuffer, BytesRead, nil);
    if BytesRead > 0 then
    begin
      Buffer[BytesRead] := #0;
      OemToAnsi(Buffer, Buffer);
      Result := string(Buffer);
    end;
  until (BytesRead < ReadBuffer);
  FreeMem(Buffer);
end;
//---------------------------------------------------写管道

procedure WriteToPipe(Pipe: THandle; Value: string);
var
  len: integer;
  BytesWrite: DWord;
  Buffer: PChar;
begin
  len := Length(Value) + 1;
  Buffer := PChar(Value + #10);
  WriteFile(Pipe, Buffer[0], len, BytesWrite, nil);
end;
//---------------------------------------------------

begin
  { TODO -oUser -cConsole Main : Insert code here }
  begin
    with Security do begin
      nLength := SizeOf(TSecurityAttributes);
      bInheritHandle := true;
      lpSecurityDescriptor := nil;
    end;

    Createpipe(ReadOut, WriteOut, @Security, 0);
    Createpipe(ReadIn, WriteIn, @Security, 0);

    FillChar(StartUpInfo, Sizeof(StartUpInfo), #0);
    StartUpInfo.cb := SizeOf(StartUpInfo);
    with StartUpInfo do
    begin
      hStdOutput := WriteOut;
      hStdInput := ReadIn;
      hStdError := WriteOut;
      dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
      wShowWindow := SW_HIDE;
    end;
    CreateProcess(nil,
      PChar('cmd'),
      @Security,
      @Security,
      true,
      NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      StartUpInfo,
      ProcessInfo);
      {CreateProcess(nil, PChar('cmd'), @Security, @Security, true,
      DETACHED_PROCESS, nil, nil, StartUpInfo, ProcessInfo);           英文提示}
//--------------------------------------------------------------------控制台输入
    begin
      start:
      readln(s);
      WriteToPipe(WriteIn, s);
      Writeln(ReadFromPipe(ReadOut));
    //readln;
      s := '';
      goto start;
    end;
  end;
  //------------------------------------
end.

 

 

 

 

 

 

lose

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

举报

相关推荐

0 条评论