Q&A

  • [급질문] 핸들을 이용해 윈도우 좌표 얻는법...
아래와 같은 함수를 이용하여 화면상에 떠 있는 윈도우의 핸들을 얻었습니다..

물론 그 핸들을 이용해 getwindowrect에 파라메터로 핸들과 Rect구제체를 집어넣고 rect.left로 좌표값을 얻으니 값이 얻어지지 않습니다. 값은 나오는데 좌표값을 벗어나는 값을 내뱉고 있습니다... 뭐가 잘못된건가요.. - 아래에서 얻어진 핸들값은 제대로 된 핸들값입니다. -



function EnumWindowsProc(wnd : HWND; lpr : integer):Boolean; stdcall;

begin



if IsWindowVisible(Wnd) and ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or(HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow)) and

((GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) = 0) then

begin

hdles[hdi] := GetWindowLong(wnd, GWL_HINSTANCE);

inc(hdi);

end;



end;



hdles는 전역으로 배열을 선언해놓았습니다. 그리고 hdi도 전역변수로 선언되어 있습니다.

getwindowrect(hdles[i],RECT)로 적어놓고 윈도우 좌표값을 '뱉어'라고 했는데.. 엉둥한 말만 내놓고 있네요..

1  COMMENTS
  • Profile
    하얀까마귀 2000.02.29 23:07
    안녕하세요 하얀까마귀입니다.

    음.. 좀 이상하네요..

    핸들이 정확하다면 다르게 나올 이유가 없을것 같은데.. 혹시 다른데 문제가 있는것

    아닌까요.???

    예전에 제가 다른프로그램의 좌표를 구한적이 있어서 약간 수정해서 올려 드릴께요..

    테스트 해봤는데 잘되는데???.. 좀 이상하네요...

    이거 한번 해보시고 그래도 안돼면.. 다시 올려 주세요.. 그럼...



    procedure TForm1.Button1Click(Sender: TObject);

    var

    WinHandle : THandle;

    fRect : TRect;

    begin

    winHandle := FindWindow('CabinetWClass',nil);

    if WinHandle <= 0 then

    WinHandle := FindWindow('IEFrame',nil);

    if Winhandle <= 0 then

    begin

    ShowMessage('IE가 실행되지 않았습니다');

    Exit;

    end;

    if getWindowRect(WinHandle, fRect) then

    begin

    showmessage(IntToStr(fRect.Left) + ' ' +

    IntToStr(fRect.Top) + ' ' +

    IntToStr(fRect.Right) + ' ' +

    IntToStr(fRect.Bottom) );

    end else begin

    ShowMessage('좌표를 구할수 없습니다.');

    end;

    end;



    물론 이건 테스트로 만든거고 폼에 버튼하나밖에 없습니다..

    그럼.. 즐거운시간 되세요..

    - 하얀까마귀 -