外网IP变了为何不刷新网页?
我编了一程序,想要实现当外网IP变化时就刷新一次网页,部分代码如下:
UpdateData(true);
if(m_website.TrimLeft()=="")
{
int a=MessageBox(L"请输入网址!",L"提示信息",MB_ICONINFORMATION);
return;
}
CString szData=m_website.Trim();
CStringList szList;
CString szTemp;
int i=0;
while(AfxExtractSubString(szTemp,szData,i++,'\n'))
{
szList.AddTail(szTemp);
}
for(int i=0;i<szList.GetCount();i++)
{
ShellExecuteW(NULL,L"open",szList.GetAt(szList.FindIndex(i)),NULL,NULL,SW_SHOWNORMAL);//打开网页
}
label:CString str1=GetLocalIpAddress();//GetLocalIpAddress()是获取外网IP的函数
for(i=0;;i++)//死循环,外网IP不变就一直循环下去
{
CString str2=GetLocalIpAddress();
if(str1.Collate(str2)!=0)//如果外网IP改变了
{
for(int i=0;i<szList.GetCount();i++)//刷新打开的网页
{
HWND hIE;
hIE=::FindWindow(NULL,NULL);
if(hIE!=NULL)
{
::PostMessage(hIE,WM_KEYDOWN,VK_F5,1);
::PostMessage(hIE,WM_KEYUP,VK_F5,1);//向网页窗口发送“F5”以实现刷新网页的目的
}
}
goto label;//跳转到label处执行,重新把外网IP地址赋值给str1
}
}
}
事实上当程序执行下面这段代码时网页并不刷新,我不知道问题出在哪里了,我敢保证代码是绝没有问题的。
HWND hIE;
hIE=::FindWindow(NULL,NULL);
if(hIE!=NULL)
{
::PostMessage(hIE,WM_KEYDOWN,VK_F5,1);
::PostMessage(hIE,WM_KEYUP,VK_F5,1);//向网页窗口发送“F5”以实现刷新网页的目的
}
当外网IP改变时,程序运行时会出现连接超时这种情况,我不知道是不是由于这的原因。望高手指点一二,多谢了!
获取外网IP的函数如下:
CString CWebLoginDlg::GetLocalIpAddress(void)//获取外网IP的函数
{
CInternetSession mySession(NULL,0);
CHttpFile* myHttpFile=NULL;
char strsource[1024] = {0};
CString Address;
CString mySiteInfo;
Address=L"http://www.
myHttpFile=(CHttpFile*)mySession.OpenURL(Address);//读取网络地址
while(myHttpFile->Read(strsource,sizeof(strsource))>0)//循环读取下载来的网页文本
{
USES_CONVERSION;
mySiteInfo += A2T(strsource);
}
return mySiteInfo;
}