Lyn's Tip
글 수 75
역시 이번에도 제 상대를 해주실 몰모트는 메모장 되겠습니다 (...)
var
hNotepad : THandle;
Option : Integer;
begin
hNotepad := 0;
ShellExecute(Panel1.Handle, 'open', 'notepad.exe', '', '', SW_HIDE);
repeat
hNotepad := FindWindow(PChar('Notepad'), nil);
sleep(0);
Application.ProcessMessages;
until hNotepad <> 0; //프로그램이 열릴때까지 루프를 돈다.
Windows.SetParent(hNotepad, Panel1.Handle); //뒤 파라메터가 parent의 핸들
Option := GetWindowLong(hNotepad, GWL_STYLE);
Option := Option - WS_CAPTION - WS_BORDER - WS_POPUP;;
SetWindowLong(hNotepad, GWL_EXSTYLE, Option);
ShowWindow(hNotePad, SW_SHOWMAXIMIZED);
end;
중점이 되는 부분은 SetParent 함수. Window 의 부모를 바꿔서 내장이 가능하게 합니다.
Ps. 실행될때까지 루프를 돌아서 찾는방법을 쓰고 있습니다. 참 무식한방법인데... 제 머리속에는 다른방법이 안떠올라서 =_=;;;
더 깔끔한 방법을 아시는 분 있으면 답변 부탁드립니다.
var
hNotepad : THandle;
Option : Integer;
begin
hNotepad := 0;
ShellExecute(Panel1.Handle, 'open', 'notepad.exe', '', '', SW_HIDE);
repeat
hNotepad := FindWindow(PChar('Notepad'), nil);
sleep(0);
Application.ProcessMessages;
until hNotepad <> 0; //프로그램이 열릴때까지 루프를 돈다.
Windows.SetParent(hNotepad, Panel1.Handle); //뒤 파라메터가 parent의 핸들
Option := GetWindowLong(hNotepad, GWL_STYLE);
Option := Option - WS_CAPTION - WS_BORDER - WS_POPUP;;
SetWindowLong(hNotepad, GWL_EXSTYLE, Option);
ShowWindow(hNotePad, SW_SHOWMAXIMIZED);
end;
중점이 되는 부분은 SetParent 함수. Window 의 부모를 바꿔서 내장이 가능하게 합니다.
Ps. 실행될때까지 루프를 돌아서 찾는방법을 쓰고 있습니다. 참 무식한방법인데... 제 머리속에는 다른방법이 안떠올라서 =_=;;;
더 깔끔한 방법을 아시는 분 있으면 답변 부탁드립니다.

CreateProcess를 이용한 방법이 다양한 제어가 가능해서 괜찮은 것 같아요.