终于申请到了自己的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系统的连接,如果不喜欢这么复杂的登陆,直接访问这个就可以了。