Q&A

  • [질문] 익스플로 Handle 관련 질문 드립니다. (도와 주세요~)
▶ handle_2 값과 같은 pWb.Hwnd를 찾아서 pWB넘기려면 어떻게 해야되는지요
방법을 아시는분은 꼭 좀 도와 주시면 감사하겠습니다.
그럼 이번주 내내 즐겁고 편안한 한주 되시길  바랍니다.


function check(TopWnd:HWnd): IWebBrowser2;
var
    szClassName: array [0..50] of Char;
    i, cnt: Integer;
    hr: HResult;
    pSW: IShellWindows;
    spDisp: IDispatch;
    pWB: IWebBrowser2Disp;
    pBrowser: IWebBrowser2;
    handle_2:HWnd;
begin

    hr := CoCreateInstance(CLASS_ShellWindows, nil, CLSCTX_LOCAL_SERVER, IID_IShellWindows, pSW);
    if hr <> S_OK then Exit;

    cnt := pSW.Get_Count;
    for i := 0 to cnt -1 do
    begin
        spDisp := pSW.Item(i);
        spDisp.QueryInterface(IID_IWebBrowser, pWB);

        if pWB <> nil then
        begin
            handle_2 := GetWindow(pwb.HWND, GW_CHILD);

            while handle_2 > 0 do
            begin
                GetClassName(handle_2, szClassName, 50);

                if (StrPas(szClassName) = 'Frame Tab')  then
                    break;

                handle_2 := GetWindow(handle_2, GW_HWNDNEXT);
            end;


// 아래에서 어떻게 처리해야 되는지요~ ^^;
            PBrowser := IWebBrowser2(pWB);
            Result := pBrowser;
            exit;

        end;
    end;
end;

6  COMMENTS
  • Profile
    최용일 2009.12.14 21:42
    handle_2가 pwb.HWND의 child나 next window인데... pwb.HWND와 같은 윈도우가 존재할리가 없을듯한데요... 똑같은 핸들을 가진 윈도우가 2개가 있을 수가 없으니까요...
  • Profile
    delpia 2009.12.14 22:10
    답변 감사합니다. ^^

    그렇다면 아래 문장처럼 쓰지 않고 PWB에서 'Frame Tab' 찾으려면 어떻게 해야되나요 ^^;
    handle_2 := GetWindow(pwb.HWND, GW_CHILD);
  • Profile
    최용일 2009.12.15 00:11
    뭘하려는지 도저히 이해가 가지않지만... 아래와 같이 하시면 원하시는것을 찾으실 수 있습니다.
    GetWindow대신에 FindWidnowEx를 쓰세요.
    handle_2 := FindWindowEx(pwb.HWND, 0, 'Frame Tab', '');
  • Profile
    delpia 2009.12.15 00:52
    제가 좀 몰라서요..... ^^;
    초보자라서 그러려니하고 이해해 주시길 바랍니다.

    제가 하고 싶은것은 pWB에서 'Frame Tab'이라는 자식윈도우를 찾아서 찾은것을 IWebBrowser2형식으로 값을 넘기려고 합니다.
  • Profile
    최용일 2009.12.15 03:53
    IE7에서 탭을 사용하는 경우라도 그냥 바로 변환하시면 되는데요... 굳이 Frame Tab을 찾을 필요가...
    예를 들어 탭이 2개이면 pSW.Get_Count가 2가됩니다.


    cnt := pSW.Get_Count;
    for i := 0 to cnt -1 do
    begin
    spDisp := pSW.Item(i);
    spDisp.QueryInterface(IID_IWebBrowser, pWB);

    if pWB <> nil then
    begin
    pBrowser := IWebBrowser2(pWB);
    Result := pBrowser;
    ShowMessage(Result.LocationURL);
    end;
    end;
  • Profile
    delpia 2009.12.15 19:43
    도움 감사드립니다. ^^
    그럼 편안한 하루되시길 바랍니다.