코딩하는 나귀

GetCookieAll 함수에 원하는 Document 포인터를 넘겨주면 그 안에 있는
모든 프레임의 쿠키를 읽어오는 함수다. 물론 고치면 쿠키 말고도 프레임들의
각종 정보를 다 얻을 수 있다. Document는 항상 접근 가능한 것이 아니므로
접근이 안될경우에 대한 예외처리를 잊지 말도록... 머 안해도 간간히 뜨는
경고창 닫아 가며 써도 괜찮다면야... -_-

함수에 문제가 있다면 혼자만 알지 말고 댓글로 달아주시면 감사하겠음!!! ㅋㅋㅋ

function GetBrowserForFrame(Document: IHTMLDocument2; FrameNumber: Integer): IWebBrowser2;
var
  WebBrowser: IWebBrowser2;
  Container: IOLEContainer;
  Enumerator: ActiveX.IEnumUnknown;
  FetchedNumber: PLongInt;
  UnknownFrame: IUnknown;
  hr: HRESULT;

begin
  Result := nil;
  FetchedNumber := nil;

  Container := Document as IOleContainer;
  hr := Container.EnumObjects(OLECONTF_EMBEDDINGS or OLECONTF_OTHERS, Enumerator);
 
  if hr <> S_OK then
  begin
    Container._Release;
    Exit;
  end;

  Enumerator.Skip(FrameNumber);
  Enumerator.Next(1, UnknownFrame, FetchedNumber);
  hr := UnknownFrame.QueryInterface(IID_IWebBrowser2, WebBrowser);
  if hr = S_OK then
  begin
    Result := WebBrowser;
  end;
end;

function GetCookieAll(Document: IHTMLDocument2): String;
var
  i: Integer;
  FrameDocument2: IHTMLDocument2;
  WebBrowser: IWebBrowser2;

begin
  Result := '';

  for i:=0 to Document.frames.length-1 do
  begin
    WebBrowser := GetBrowserForFrame(Document, i);
    if not Assigned( WebBrowser ) then
    begin
      Continue;
    end;

    FrameDocument2 := WebBrowser.Document as IHTMLDocument2;

    if not Assigned( FrameDocument2 ) then
    begin
      Continue;
    end;

    if Pos(FrameDocument2.cookie, Result) = 0 then
    begin
      Result := Result + FrameDocument2.cookie;
    end;
  end;
end;