我想用vc来模拟实现鼠标右键点击IE,选属性中的“Internet 选项”,然后再点击确定的过程!!换句话说我想知道在“Internet 选项”对话框设置后,最后点击“确定”或者“应用”后究竟执行了什么代码!!!!
事情是这样的:我在注册表中设置了活动桌面后,把一个网页作为桌面背景,如:c:\aa.html,当我修改aa.html内容后,在桌面上按F5或者刷新,却无法刷新,我发现此时如果打开IE的属性设置对话框,点击“确定”或者“应用”后,桌面的网页的内容才会得到更新,我怎样用vc来实现刷新呢???求大虾们帮帮我啊,

解决方案 »

  1.   

    或者Invalidate(0,NULL,0);你都试试
      

  2.   

    我试过了,都不行,而且模拟按F5也不行,下面是刷新的代码,桌面闪一下,但网页内容还是不更新      ::SHChangeNotify( SHCNE_ASSOCCHANGED , SHCNF_IDLIST | SHCNF_FLUSH, 0, 0);     HWND hWndProgram = ::FindWindow( _T("Progman"), NULL);     HWND hWndDefView = ::FindWindowEx( hWndProgram, NULL, _T("SHELLDLL_DefView"), NULL);     HWND hWndListView= ::FindWindowEx( hWndDefView, NULL, _T("SysListView32"),     NULL);     ::PostMessage( hWndListView, WM_KEYDOWN, VK_F5, 0);     ::PostMessage( hWndListView, WM_KEYUP,    VK_F5, 0);
      

  3.   

    LZ在MSDN中输入IActiveDesktop看一下。
      

  4.   

    有必要模拟这么麻烦么?
    试试InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0));
    来自#include <wininet.h> 和lib: wininet.lib或者SystemParametersInfo API
      

  5.   

    试过了,还是不行,这两句也加上了,就是不刷新SystemParametersInfo(SPI_SETWORKAREA,0,NULL,SPIF_SENDCHANGE); 
    ::SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0); 
      

  6.   

    终于搞定了,把实现代码贴出来供大家参考,祝大家学习进步,少绕点弯儿,实现原理就是依靠 IActiveDesktop的成员方法HRESULT   hr;
    USES_CONVERSION;
    IActiveDesktop *pActiveDesktop;
    hr = CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_INPROC_SERVER,IID_IActiveDesktop,(void**)&pActiveDesktop);
    if(hr==S_OK){
    COMPONENTSOPT opt;
    opt.dwSize = sizeof(opt);
    opt.fActiveDesktop =  opt.fEnableComponents = 0;
    HRESULT hr = pActiveDesktop->SetDesktopItemOptions(&opt,0); pActiveDesktop->ApplyChanges(AD_APPLY_REFRESH);
    opt.fActiveDesktop =  opt.fEnableComponents = TRUE;
     hr = pActiveDesktop->SetDesktopItemOptions(&opt,0);
     WCHAR wszPath[MAX_PATH];
     CString strPath="c:\\a.html";
     LPTSTR lpStr = strPath.GetBuffer(strPath.GetLength());
     MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszPath, MAX_PATH);
     strPath.ReleaseBuffer();
     hr = pActiveDesktop->SetWallpaper(wszPath, 0);
      pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
     pActiveDesktop->ApplyChanges(AD_APPLY_REFRESH);}
    pActiveDesktop->Release();