간단하게 내 프로그램에서 메모장에 텍스트를 넣고 가져오는 방법으로 예로들어 보도록 하겠습니다.
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를 찾아 컨트롤합니다.