PuTTY 콘솔창의 데이터를 읽어들여 마지막 라인을 가져오는 방법에 대하여.

PuTTY는 기본설정으로 화면상에 드래그를 하면 그 영역이 클립보드로 복사된다.
이 방법을 이용하여 PuTTY 터미널의 크기만큼 드래그해서 적당히 가공하는 방식으로 마지막 라인을 가져올 수 있다.
잘만하면 expect 같은 프로그램처럼 쓸 수도 있을 듯.
붙여넣기는 마우스 오른쪽버튼 클릭이다.




// PuTTY창을 전부 드래그한 다음 마지막 라인만 추려내 반환
// _____________________________________________________________________________

function GetPuttyLastLine(hPutty: HWND): String;
var
  PuttyRect: TRect;
  sList: TStringList;

begin
  Result:='';

  // PuTTY창 크기 구함
  Windows.GetClientRect(hPutty, PuttyRect);
  
  // 드래그
  SendMessage(hPutty, WM_LBUTTONDOWN, 0, MakeLparam(PuttyRect.Right, PuttyRect.Bottom));
  SendMessage(hPutty, WM_MOUSEMOVE, MK_LBUTTON, MakeLParam(0, 0));
  SendMessage(hPutty, WM_LBUTTONUP, 0, MakeLParam(0, 0));
  SendMessage(hPutty, WM_LBUTTONUP, 0, MakeLParam(0, 0));
  SendMessage(hPutty, WM_LBUTTONUP, 0, MakeLParam(0, 0));
  CloseHandle(hPutty);
  
  // 마지막 라인만 추려내 반환
  sList:=TStringList.Create;
  try
    if
ClipBoard.HasFormat(CF_TEXT) then begin
      sList.Text:=Trim(ClipBoard.AsText);
      Result:=Trim(sList[sList.Count-1]);
    end;
  finally
    FreeAndNil(sList);
  end;
end;




procedure TForm1.Button1Click(Sender: TObject);
begin
  // PuTTY 핸들은 상황에 맞게 구해서 넣자...
  Memo1.Text:=GetPuttyLastLine(FindWindow('PuTTY', nil));
end;





Posted by bloodguy
,