注册 登录
编程论坛 VC++/MFC

VC++ 打开的网页为何不能同时刷新?

文羽弈 发布于 2011-08-02 16:38, 832 次点击
只有本站会员才能查看附件,请 登录

我开发了一软件,当单击“开始”按钮时,文本框中输入的网址都能够同时打开,且每隔一定时间这些网页会同时刷新一次。但经测试我发现这些网页并没有同时刷新,而是只刷新当前切换的网页,我想请教一下,如何才能每隔一定时间同时刷新打开的网页呢?
当单击“开始”按钮时,代码如下:
void CWebLoginDlg::OnBnClickedStart()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(true);
    if(m_time==""&&m_website=="")
    {
        int a=MessageBox(L"请输入间隔时间和网址!",L"提示信息",MB_ICONINFORMATION);
        return;
    }
    if(m_time==""&&m_website!="")
    {
        int a=MessageBox(L"请输入间隔时间!",L"提示信息",MB_ICONINFORMATION);
        return;
    }
    if(m_time!=""&&m_website=="")
    {
        int a=MessageBox(L"请输入网址!",L"提示信息",MB_ICONINFORMATION);
        return;
    }
    CString szData=m_website.TrimLeft();
    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);//打开网址对应的网页
    }
    for(i=0;;i++)//死循环,每隔一定时间就打开一次网页,并同时刷新这些网页
    {
        DWORD show=_tcstoul(m_time,NULL,10);  
        Sleep(show*1000);//设置间隔时间
       // 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”以实现刷新网页的目的
            }
        //}
    }
}
4 回复
#2
随心2011-08-03 15:19
hIE=::FindWindow(NULL,NULL); // 如何能保证Find到5个窗口,
可以枚举一下窗口 ,如果是IE,则发送F5按下的消息
#3
文羽弈2011-08-03 17:02
回复 2楼 随心
关键是如何枚举想要打开的网页窗口呢?很想知道,给点儿代码更好,谢谢!

[ 本帖最后由 文羽弈 于 2011-8-3 17:07 编辑 ]
#4
随心2011-08-04 17:19
程序代码:
bool  CALLBACK lpEnumFunc(HWND hwnd,LPARAM lParam)                 //枚举窗口回调函数
{
    if(hwnd==NULL)
        return false;
    else
    {
        char szClassName[128] = {0};
        ::GetClassName(hwnd,szClassName, sizeof(szClassName));              

        if(strcmp(szClassName,"SWT_Window0") == 0)                        
        {
            g_vecDesWnd.push_back(hwnd);
        }
        return true;
    }
}


EnumWindows(WNDENUMPROC(lpEnumFunc),NULL);
#5
文羽弈2011-08-05 09:05
回复 4楼 随心
昨天我没看见你的回复,很感谢你的帮助。只是我还不是很懂,这段代码应该放在程序的哪个地方才能起到作用呢?我怎么还是做不出来呢?我的基础不好,很希望能再次得到您的帮助,我会把分全给你的,谢谢!
1