procedure TForm1.Button1Click(Sender: TObject);
var
Desktop: IActiveDesktop;
info: TComponentsOpt;
begin
DeskTop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
info.dwSize:= sizeof(info);
info.fEnableComponents:=false;
info.fActiveDesktop:=true;
DeskTop.AddDesktopItem(info,3);//此处出错,提示说参数没有初始化
DeskTop.ApplyChanges(AD_APPLY_ALL);
DeskTop.ApplyChanges(AD_APPLY_REFRESH);
end;麻烦高手指教,在线等待,先谢谢了。

解决方案 »

  1.   

    function AddDesktopItem(var pcomp: TShComponent; dwReserved: DWORD): HResult; stdcall;
    info应该是TShComponent类型
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    Var ADeskTop: IActiveDesktop;
    AComponent : _tagCOMPONENT;
    ACompPos : _tagCOMPPOS;
    hr: HRESULT;
    BmpName : String;
    begin
    BmpName := 'http://www.365tl.com';
    hr := CoCreateInstance(CLSID_ActiveDesktop, nil, CLSCTX_INPROC_SERVER,IID_IActiveDesktop, ADeskTop );MessageDlg(SysErrorMessage(HResultCode(hr)),mtWarning,[mbOK],-1); // => 'Operation Reussie' donc le probleme vient pas de la (enfin je pense)ACompPos.dwSize := SizeOf(_tagCOMPPOS);
    ACompPos.iLeft := 200;
    ACompPos.iTop := 200;
    ACompPos.dwWidth :=  1;
    ACompPos.dwHeight := 1;
    ACompPos.izIndex := 0;
    ACompPos.fCanResize := True;
    ACompPos.fCanResizeX := True;
    ACompPos.fCanResizeY := True;
    ACompPos.iPreferredLeftPercent := 10;
    ACompPos.iPreferredTopPercent := 10;
    AComponent.dwSize := sizeof(_tagCOMPONENT);
    AComponent.dwID := 0;
     //AComponent.iComponentType := COMP_TYPE_WEBSITE;
    AComponent.iComponentType := COMP_TYPE_HTMLDOC;
    AComponent.fChecked := True;
    AComponent.fDirty := False;
    AComponent.fNoScroll := true;
    AComponent.cpPos := ACompPos;
    MultiByteToWideChar(CP_ACP,0,PChar(BmpName),StrLen(PChar(BmpName))+1,AComponent.wszFriendlyName,sizeof(AComponent.wszFriendlyName));
    MultiByteToWideChar(CP_ACP,0,PChar(BmpName),StrLen(PChar(BmpName))+1,AComponent.wszSource,sizeof(AComponent.wszSource));
    MultiByteToWideChar(CP_ACP,0,PChar(BmpName),StrLen(PChar(BmpName))+1,AComponent.wszSubscribedURL,sizeof(AComponent.wszSubscribedURL));//ADeskTop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
    hr := ADeskTop.AddDesktopItem(AComponent,0);//还是这儿出错。
    MessageDlg(SysErrorMessage(HResultCode(hr)),mtWarning,[mbOK],-1); ADeskTop.ApplyChanges(AD_APPLY_ALL);
    end;
      

  3.   

    hahafan(注意!此人前途迷茫) 
    能不能留个QQ向你请教一下。我的QQ:23974749
      

  4.   

    试了你的代码,确实总报“参数错误”,我也没做过这方面的东西,不了解是什么原因所致,只能帮你顶了。
    我的msn:[email protected]
      

  5.   

    hahafan(注意!此人前途迷茫) 
    谢谢,我加你了。
    其他人知道吗?
    麻烦帮忙一下,小弟在此先谢谢了。
      

  6.   

    info定义了,但你没有创建实例
      

  7.   

    AddDesktopItem的第一个参数是TShComponent类型的,不是TComponentsOpt类型的吧
      

  8.   

    不好意思,第一个例子可能不行,后来我又找个例子,理论上好象是可以的,可是调试的时候出现问题了,大家帮忙看看,程序如下:procedure TForm1.Button1Click(Sender: TObject);
    Var ADeskTop: IActiveDesktop;
    AComponent : _tagCOMPONENT;
    ACompPos : _tagCOMPPOS;
    hr: HRESULT;
    BmpName : String;
    begin
    BmpName := 'http://www.365tl.com';
    hr := CoCreateInstance(CLSID_ActiveDesktop, nil, CLSCTX_INPROC_SERVER,IID_IActiveDesktop, ADeskTop );MessageDlg(SysErrorMessage(HResultCode(hr)),mtWarning,[mbOK],-1); // => 'Operation Reussie' donc le probleme vient pas de la (enfin je pense)ACompPos.dwSize := SizeOf(_tagCOMPPOS);
    ACompPos.iLeft := 200;
    ACompPos.iTop := 200;
    ACompPos.dwWidth :=  1;
    ACompPos.dwHeight := 1;
    ACompPos.izIndex := 0;
    ACompPos.fCanResize := True;
    ACompPos.fCanResizeX := True;
    ACompPos.fCanResizeY := True;
    ACompPos.iPreferredLeftPercent := 10;
    ACompPos.iPreferredTopPercent := 10;
    AComponent.dwSize := sizeof(_tagCOMPONENT);
    AComponent.dwID := 0;
     //AComponent.iComponentType := COMP_TYPE_WEBSITE;
    AComponent.iComponentType := COMP_TYPE_HTMLDOC;
    AComponent.fChecked := True;
    AComponent.fDirty := False;
    AComponent.fNoScroll := true;
    AComponent.cpPos := ACompPos;
    MultiByteToWideChar(CP_ACP,0,PChar(BmpName),StrLen(PChar(BmpName))+1,AComponent.wszFriendlyName,sizeof(AComponent.wszFriendlyName));
    MultiByteToWideChar(CP_ACP,0,PChar(BmpName),StrLen(PChar(BmpName))+1,AComponent.wszSource,sizeof(AComponent.wszSource));
    MultiByteToWideChar(CP_ACP,0,PChar(BmpName),StrLen(PChar(BmpName))+1,AComponent.wszSubscribedURL,sizeof(AComponent.wszSubscribedURL));//ADeskTop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
    hr := ADeskTop.AddDesktopItem(AComponent,0);//还是这儿出错。
    MessageDlg(SysErrorMessage(HResultCode(hr)),mtWarning,[mbOK],-1); ADeskTop.ApplyChanges(AD_APPLY_ALL);
    end;
      

  9.   

    Undeclared identifier: 'IID_IActiveDesktop'
      

  10.   

    顶啊
    我也一样CLSID_ShellDesktop: TGUID = (
        D1:$00021400; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46));
    Private CLSID_ActiveDesktop As New Guid("75048700-EF1F-11D0-9888-006097DEACF9")
        Private IID_IActiveDesktop As New Guid("F490EB00-1240-11D1-9888-006097DEACF9")是不是把下面的转成delphi就OK了?
      

  11.   

    //CLSID_ActiveDesktop : TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
     IID_IActiveDesktop : TGUID = '{F490EB00-1240-11D1-9888-006097DEACF9}';还是不行,LZ搞定没有?