본문 바로가기

Delphi/꿀팁

내 프로그램에서 다른 프로그램 컨트롤하기

간단하게 내 프로그램에서 메모장에 텍스트를 넣고 가져오는 방법으로 예로들어 보도록 하겠습니다.


procedure TForm1.Button1Click(Sender: TObject);

var

  hNotePad : THandle;

begin

  hNotePad := FindWindow('Notepad', nil); //메모장의 최상위 ClassName인 Notepad로 핸들을 찾습니다.

  hNotePad := FindWindow(nil, '제목 없음 - 메모장'); //또는 메모장의 타이틀명으로 핸들을 찾습니다.


  EnumChildWindows(hNotePad, @EnumWindowsProc, 0); //텍스트를 넣을 메모장의 자식 핸들을 가져옵니다.

end;

1. FindWindow를 사용하여 텍스트를 보내고 받을 메모장을 찾습니다.


function EnumWindowsProc(hChildWnd: THandle; dwLParam: DWord): Boolean; stdcall;

var

  sClassName : string;

  sGetText : string;

  sSetText : string;

  nLength : Integer;

begin

  SetLength(sClassName, MAXCHAR);

  GetClassName(hChildWnd, PChar(sClassName), MAXCHAR); //메모장 자식의 ClassName을 가져옵니다.

  SetLength(sClassName, Length(PChar(sClassName)));


  //이제 원하는 ClassName을 찾아 컨트롤합니다.

  if sClassName = 'Edit' then //메모장의 텍스트를 입력 받는 Class는 Edit입니다.

  begin

    sSetText := 'Hello World!';

    SendMessage(hChildWnd, WM_SETTEXT, Length(sSetText), LPARAM(PChar(sSetText))); //메모장에 텍스트를 입력합니다.


    nLength := SendMessage(hChildWnd, WM_GETTEXTLENGTH, 0, 0);

    SetLength(sGetText, nLength);

    nLength := SendMessage(hChildWnd, WM_GETTEXT, nLength + 1, LPARAM(PChar(sGetText))); 

    //메모장에 입력한 텍스트를 가져옵니다.

    SetLength(sGetText, nLength);


    ShowMessage(sGetText);

  end;

end;

2. 전역 함수로 EnumWindowsProc을 선언하고 원하는 자식Class를 찾아 컨트롤합니다.

반응형