보통은 findwindow 로 핸드을 알아내고 나서
그 핸들을 findwindowex로 그 자식들을 알아내고
getnextwindow 가 하여튼 다음 윈도로 이동을 합니다.
그런데 문제가
A라는 프로그램-----어떤핸들 1------그아래 어떤핸들 11------그아래 어떤핸들 111
+ 어떤핸들 2------어떤핸들 22
+ 어떤핸들 3------어떤핸들 33
1의 핸들 밑에 있는핸들 그밑에 있는 핸들 이것들은 어떻게 핸들을 얻나요
잉잉잉 설명이 이상한가????
하여튼 부탁드립니다.
윈도우인지 컨트롤들인지 설명해주시면 자세히 말씀드릴수있을것같은데요....
무슨작업을 하실런지......
만약 어떤핸들1,2,3가 윈도우고 11,22,33들은 Button,Edit,Static이라면
여러군데서 주워들은 지식으로 설명하자면...
이렇게 해보시죠 "계산기"를 예를 들면...
function EnumChildProc(AHnd: hWnd): BOOL; stdcall;
{Child를 얻기위한 function을 정의해주죠 stdcall 이나 export를 선언 해주어야합니다
왜냐면..
(응용프로그램이처리할 콜백함수로 처리하기위해서).
EnumChildWindows에 쓰기위해..}
var
S:string;
ClassName:Array[0..255] of Char;
{클래스명을 받기 위해선언합니다 GetClassName에...}
begin
Result := True;
GetClassName(AHnd, ClassName, 255);
{핸들에 대한 클래스명을 받아오고...}
S := PChar(ClassName);
{문자비교를 하기위해 PCha형으로 바꿔주고...}
if Pos('Button', S) > 0 then
{계산기 안에 Button이 있으면....(Button만 처리 한답니다...)}
begin
SendMessage(AHnd, {WM_USER ..등등}, 0, 0);
{윈도우 메세지를 보내서 필요한 작업을 하시면 되죠....}
end;
end;
procedure Test;
var
X:string;
h: THandle;
begin
X:='계산기';
h := FindWindow(nil, PChar(X))); {계산기 을 찾고서.....}
EnumChildWindows(h, @EnumChildProc, 0);
{부모가소유한 자식윈도우의 핸들을 콜백함수로 처리한다는 군요..}
end;
그외에 클래스로 받아온다든지 클래스정보를 알고자한다든지 등등 작업들은
API Help 보세요...
API는 너무 오묘한 진리가(?) 있답니다....
GetParent 도있고 GetClassInfo도 있고......
수많은 고수님들앞에서 몇자 적으려니 손가락이 떠~~ㄹ 리는군요...
틀린점은 지적해주세요....
그럼수고하세요...