不能用SetWallpaper这个方法来设置.
这样设置只能先保存WEB页面.再当墙纸贴上去.不知道 IActiveDesktop还有哪个函数可以直接设置....

解决方案 »

  1.   

    BOOL GenerateDesktopItemHtml( LPCWSTR pwszFileName,
     LPCOMPONENT pcomp,
     DWORD dwReserved)
    { HRESULT hr;
    IActiveDesktop* pIAD;
    //创建接口的实例
    hr = CoCreateInstance ( CLSID_ActiveDesktop,  NULL, CLSCTX_INPROC_SERVER,       
    IID_IActiveDesktop, (void**) &pIAD );
    if(!SUCCEEDED(hr))  return FALSE;    ::MessageBox(NULL,"成功1","2",NULL);
        hr = pIAD->GenerateDesktopItemHtml( pwszFileName,pcomp,dwReserved);
    if(!SUCCEEDED(hr)) return FALSE;
          hr = pIAD->ApplyChanges(AD_APPLY_ALL);
    ::MessageBox(NULL,"成功2","2",NULL);
    if(!SUCCEEDED(hr)) return FALSE;
        pIAD->Release();
    ::MessageBox(NULL,"成功3","2",NULL);
    return TRUE;
    }void CFffDlg::OnOK() 
    {
    CString lpa = "c:\\ass.html";
       size_t aLen = strlen( lpa ) + 1;
       
       int wLen = MultiByteToWideChar(
       CP_ACP,
       0,
       lpa,
       aLen,
       NULL,
       0);
       
       LPWSTR pwszFileName = new WCHAR [wLen];
       MultiByteToWideChar(
       CP_ACP,
       0,
       lpa,
       aLen,
       pwszFileName,
       wLen);

    DWORD dwReserved=0;
    LPCOMPONENT pcomp=new _tagCOMPONENT;
    COMPPOS cpPos1=*new _tagCOMPPOS;
    cpPos1.dwSize=sizeof(cpPos1);
    cpPos1.dwHeight=1;
    cpPos1.dwWidth=1;
    cpPos1.iLeft=200;
    cpPos1.iTop=200;
    cpPos1.fCanResize=true;
    cpPos1.fCanResizeX=true;
    cpPos1.fCanResizeY=true;
    cpPos1.izIndex=0;//z轴次序?
    cpPos1.iPreferredLeftPercent=10;
    cpPos1.iPreferredTopPercent=10;
        pcomp->cpPos=cpPos1;
    pcomp->dwSize=sizeof(pcomp);
    pcomp->dwID=0;
    pcomp->fChecked=true;
    pcomp->fDirty=false;
    pcomp->fNoScroll=true;
    pcomp->iComponentType=COMP_TYPE_WEBSITE;
    CString URL="http:///www.baidu.com";
    LPTSTR lpStrw1 = URL.GetBuffer(URL.GetLength() );
    MultiByteToWideChar(CP_ACP, 0, lpStrw1, -1,pcomp->wszFriendlyName, MAX_PATH);
        MultiByteToWideChar(CP_ACP, 0, lpStrw1, -1,pcomp->wszSource, MAX_PATH);
    MultiByteToWideChar(CP_ACP, 0, lpStrw1, -1,pcomp->wszSubscribedURL, MAX_PATH);
    //pcomp->wszFriendlyName= ;
    //pcomp->wszSource
    //pcomp->wszSubscribedURL
        //GenerateDesktopItemHtml( pwszFileName,pcomp,dwReserved);
    if(TRUE==GenerateDesktopItemHtml( pwszFileName,pcomp,dwReserved))
    {
    MessageBox("成功");
    CDialog::OnOK();
    }
    else MessageBox("失败");
    // TODO: Add extra validation here}
      

  2.   

    上面是我写的 不知道是参数设置错误还是怎么反正到if(!SUCCEEDED(hr))  return FALSE;    ::MessageBox(NULL,"成功1","2",NULL);
        hr = pIAD->GenerateDesktopItemHtml( pwszFileName,pcomp,dwReserved);
    这里 就出错了....
      

  3.   

    用这个就可以了 IActiveDesktop::SetWallpaper
      

  4.   

    用IActiveDesktop::SetWallpaper 只能设置图片 要设置web页面 就必须先保存web页面到本地 再贴上去我是说有没直接设置的呢?
      

  5.   

    html格式的用setwallpaper应该是可以的
    直接设置?????
    那如果用户的机器不连接internet,即使有方法可以设置,那桌面上显示的岂不是[找不到服务器]那样的页面了?
      

  6.   

    yes  就是这个效果...不用保存到本地而直接设置 不知道IActiveDesktop是否能实现
      

  7.   

    看了IActiveDesktop的所有接口,好象没说有的刚才自己在winxp试了下:
    桌面右键->属性->桌面->自定义桌面->web->新建->www.163.com->确定,然后就看到windows开始进行网页的脱机保存工作,从这里就知道至少windows也是先保存到本地,然后再用IActiveDesktop::AddDesktopItem之类的函数添加的所以楼主的想法不知道能否实现?不过有个变通的方法:就是自己写个程序,做成透明的,附着在桌面上,就像鱼鱼桌面秀那样,只让窗口显示你要的网页就可以了
      

  8.   

    palmax(南宫煌) 说的有道理..能否看看我写的程序 到底哪里出错...对里面有些参数的设置实在不知道是干什么的.......所以估摸着赋了值..我需要的功能是能同时设置几个WEB页面在桌面上.所以不能用setwallpaper明天上班再结贴..谢谢各位
      

  9.   

    hr = CoCreateInstance ( CLSID_ActiveDesktop,  NULL, CLSCTX_INPROC_SERVER,       
    IID_IActiveDesktop, (void**) &pIAD );
    if(!SUCCEEDED(hr))  return FALSE;    ::MessageBox(NULL,"成功1","2",NULL);
        hr = pIAD->GenerateDesktopItemHtml( pwszFileName,pcomp,dwReserved);
    if(!SUCCEEDED(hr)) return FALSE;
    ------------------------------------------------------------------------------------------------------
    hr = CoCreateInstance ( CLSID_ActiveDesktop,  NULL, CLSCTX_INPROC_SERVER,       
    IID_IActiveDesktop, (void**) &pIAD );
    这句完后,hr的值写的很清楚,在这句之前你要先调用 CoInitialize();
    记得最后结束时调用 CoUninitialize()
      

  10.   

    AfxOleInit();HRESULT   hr;   
    IActiveDesktop   *pActiveDesktop;   
    COMPONENT   compDesktopItem;   
        compDesktopItem.cpPos.dwHeight=100;
    compDesktopItem.cpPos.dwWidth=100;
    hr   =   CoCreateInstance(CLSID_ActiveDesktop,   NULL,      CLSCTX_INPROC_SERVER,   
    IID_IActiveDesktop,   (void**)&pActiveDesktop);   

    compDesktopItem.dwSize   =   sizeof(COMPONENT);  
    CString strSrc="http://sohu.com";
    int unicodeLen=MultiByteToWideChar(CP_ACP,0,strSrc,-1,NULL,0); 
    wchar_t  *pUnicode;  
    pUnicode=new  wchar_t[unicodeLen+1];  
    memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));  
    MultiByteToWideChar(CP_ACP,0,strSrc,-1,(LPWSTR)pUnicode,unicodeLen);  
    wcscpy( compDesktopItem.wszSubscribedURL,pUnicode);

    wchar_t  *pUnicode1;  
    pUnicode1=new  wchar_t[unicodeLen+1];  
    memset(pUnicode1,0,(unicodeLen+1)*sizeof(wchar_t));  
    MultiByteToWideChar(CP_ACP,0,strSrc,-1,(LPWSTR)pUnicode1,unicodeLen);  
    wcscpy( compDesktopItem.wszSource,pUnicode1);

    wchar_t  *pUnicode2;  
    pUnicode2=new  wchar_t[unicodeLen+1];  
    memset(pUnicode2,0,(unicodeLen+1)*sizeof(wchar_t));  
    MultiByteToWideChar(CP_ACP,0,strSrc,-1,(LPWSTR)pUnicode2,unicodeLen);  
    wcscpy( compDesktopItem.wszFriendlyName,pUnicode2);//显示用的


        COMPPOS cpPos1;
        cpPos1.dwSize=sizeof(COMPPOS);
    cpPos1.dwHeight=100;
    cpPos1.dwWidth=100;
    cpPos1.iLeft=200;
    cpPos1.iTop=200;
    cpPos1.fCanResize=TRUE;
    cpPos1.fCanResizeX=TRUE;
    cpPos1.fCanResizeY=FALSE;
    cpPos1.izIndex=10010;
    cpPos1.iPreferredLeftPercent=10;
    cpPos1.iPreferredTopPercent=10;
        compDesktopItem.cpPos=cpPos1;
    compDesktopItem.dwID=0;
    compDesktopItem.fChecked=TRUE;//FALSE就默认不开启
    compDesktopItem.fDirty=TRUE;
    compDesktopItem.fNoScroll=FALSE;
    compDesktopItem.iComponentType=COMP_TYPE_WEBSITE;


    ///////////////////
    pActiveDesktop->AddDesktopItem(&compDesktopItem,0);   
    //pActiveDesktop->ModifyDesktopItem(&compDesktopItem,COMP_TYPE_WEBSITE);修改
    pActiveDesktop->ApplyChanges(AD_APPLY_ALL);   
    delete pUnicode;
    delete pUnicode1;
        delete pUnicode2;::CoUninitialize(); 呵呵
    楼主给分吧!~