终于申请到了自己的Gmail帐户,但是开心说没有自动登录的程序可以收邮件,并且想找一些Gmail的Client API ,并且向我推荐了HTTP 1.1中的WebDav,我可使第一次听说在HTTP 1.1 中除了Post,Get以外增加了这么多的内容,开心同时还告诉我,在Exchange 中已经支持WebDav了。

 

这些先进的东西我不懂,不过我有我的老绝招---控制IE。

其实控制IE是个老题目了,网上也有很多这样的例子,比较突出的就是codeproject上的Yahoo mail.

不过这些都没有解决Frames和IFrame的问题,而很不幸Gmail的登陆是在IFrame中,不过在Visual Assit 的帮助下,这些都不是问题。

代码基本上就是下面了。谁需要完整的例子,可以给我留言。

void getGMailFrame()

{

                       SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);   //生成一个IE窗口的智能指针

                     if (spBrowser){

                            spDispatch=NULL;

                if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))

                                   pDoc2 = spDispatch;

                            if(pDoc2!=NULL)

                            {

                                   pIFrameElementCol=NULL;

                                   CComPtr<IHTMLFramesCollection2>  pIFrameCol;

                                   if (SUCCEEDED(pDoc2->get_frames(&pIFrameCol)))

                                   {

                                          //成功得到页面中所有的Frames

                                          long p=0;

                                          pIFrameCol->get_length(&p);

                                          if(p!=0)

                                          {   //如果有一个以上的Frame,则进一步分析

                                                 for(long i=0;i<=(p-1);i++)

                                                 {    

                                                        VARIANT frameRequested;

                                                        VARIANT frameOut;

                                                        frameRequested.vt = VT_I4 ;

                                                        frameRequested.bstrVal = (BSTR)i;

                                                        pIFrameCol->item(&frameRequested, &frameOut);

                                                        IHTMLWindow2* pIFrameWindow;

                                                        frameOut.pdispVal->QueryInterface(IID_IHTMLWindow2, (void**)&pIFrameWindow);

                                                        IHTMLDocument2* pIFrameDoc;

                                                        pIFrameWindow->get_document(&pIFrameDoc);

                                                        ParseDoc(pIFrameDoc);

                                                 }

                                          }

                                   }

                            }

                     }

              }

       }

}

 

让我郁闷的是,在我写完这个程序以后,我的同事webmote找到了可以直接登入Gmail系统的连接,如果不喜欢这么复杂的登陆,直接访问这个就可以了。