Q&A

  • 하위에 있는 헨드알아내기~~~~~
보통은 findwindow 로 핸드을 알아내고 나서

그 핸들을 findwindowex로 그 자식들을 알아내고

getnextwindow 가 하여튼 다음 윈도로 이동을 합니다.



그런데 문제가

A라는 프로그램-----어떤핸들 1------그아래 어떤핸들 11------그아래 어떤핸들 111

+ 어떤핸들 2------어떤핸들 22

+ 어떤핸들 3------어떤핸들 33



1의 핸들 밑에 있는핸들 그밑에 있는 핸들 이것들은 어떻게 핸들을 얻나요



잉잉잉 설명이 이상한가????

하여튼 부탁드립니다.



1  COMMENTS
  • Profile
    클라라(yunii) 1999.12.10 22:39
    하루가지나도 답변이없길래 한마디 하겠습니다...



    윈도우인지 컨트롤들인지 설명해주시면 자세히 말씀드릴수있을것같은데요....

    무슨작업을 하실런지......



    만약 어떤핸들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도 있고......



    수많은 고수님들앞에서 몇자 적으려니 손가락이 떠~~ㄹ 리는군요...



    틀린점은 지적해주세요....



    그럼수고하세요...