我开发了一软件,当单击“开始”按钮时,文本框中输入的网址都能够同时打开,且每隔一定时间这些网页会同时刷新一次。但经测试我发现这些网页并没有同时刷新,而是只刷新当前切换的网页,我想请教一下,如何才能每隔一定时间同时刷新打开的网页呢?
当单击“开始”按钮时,代码如下:
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”以实现刷新网页的目的
            }
        //}
    }
}

解决方案 »

  1.   

     ::PostMessage(hIE,WM_KEYDOWN,VK_F5,1);
      ::PostMessage(hIE,WM_KEYUP,VK_F5,1); //向窗口发送“F5”以实现刷新网页的目的你这个应该是当前网页的 hIE吧
      

  2.   

    你用spy++看看F5的时候是什么消息使页面刷新的
    直接发这个消息过去
    不要发按键消息
      

  3.   

      hIE=::FindWindow(NULL,NULL);
      if(hIE!=NULL)
      {   ::PostMessage(hIE,WM_KEYDOWN,VK_F5,1);
          ::PostMessage(hIE,WM_KEYUP,VK_F5,1); //向窗口发送“F5”以实现刷新网页的目的
      }
    是  hIE=::FindWindow(NULL,NULL);这段代码的问题,它查找的只是当前的网页,但如何才能实现同时刷新所有打开的网页呢,很想知道,写点儿代码更好,谢谢了!
      

  4.   

    要全部刷新,你要先全部记住。不过用shellexecute貌似没有返回的hwnd给你记住。
    你可以枚举ie窗口,检查是否符合你的url地址。
    或者看看这种方式:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;176792
    刷新的话用IWebBrowser2::ExecWB,OLECMDID_REFRESH
      

  5.   

    我的url地址是随意输入的(可多可少),输入到文本框中,关键是这样的ie窗口如何枚举呢?枚举了之后就能同时刷新了吗?
      

  6.   

    FindWindow( "IEFrame ",NULL);
      

  7.   

    你现在的问题是FindWindow只能找到一个窗口
    你要得到所有窗口需要通过枚举窗口
    或者通过CreateProccess启动进程
    然后记录下进程句柄和窗口句柄
    枚举窗口可以通过EnumWindows
    这里是一个介绍
    http://www.pconline.com.cn/pcedu/empolder/gj/vc/0403/335107.html
      

  8.   


    我是这样做的
    BOOL   CALLBACK   lpEnumFunc(HWND   hIE,LPARAM   lParam)//取得每个窗口的回调函数  
    {
    WCHAR   lpWinTitle[256];
    ::GetWindowText(hIE,lpWinTitle,256-1);
    CString   m_strTitle;
    m_strTitle.Format(L"%s",lpWinTitle);
    if(m_strTitle.Find(L"360安全浏览器")!=-1)
    {
    ::PostMessage(hIE,WM_KEYDOWN,VK_F5,1);
    ::PostMessage(hIE,WM_KEYUP,VK_F5,1);
    }
       return   TRUE;
    }然后再调用EnumWindows(WNDENUMPROC(lpEnumFunc),NULL);
    为何还不行呢?给我之前做的效果一模一样。