GetTempPath(MAX_PATH, @PathName);
    FileName:=string(PathName);
    BMPFileName:=FileName+'DgDDirskdhenflsa.BMP';
    FileName:= FileName+'DgDDirskdhenflsaw.jpg';
    if FileExists(FileName) then
              DeleteFile(FileName);
    Image1.Picture.SaveToFile(FileName);
    if   (FileName='')   Then
    begin
      Self.Close;
    end
    else
    begin
        try
           MyJPEG := TJPEGImage.Create;
           with MyJPEG do
           begin
             LoadFromFile(FileName);
             MyBMP := TBitmap.Create;
             with MyBMP do
             begin
               Width := MyJPEG.Width;
               Height := MyJPEG.Height;
               Canvas.Draw(0,0,MyJPEG);
               SaveToFile(BMPFileName);
             end;
           end;
          SystemParametersInfo(SPI_SETDESKWALLPAPER,1,pchar(BMPFileName),SPIF_UPDATEINIFILE)
        finally
            MyJPEG.Free;
            MyBMP.Free;
        end;
    end;程序如上,将Image控件装载的图片释放并生成BMP文件,然后使用SystemParametersInfo设为桌面壁纸
但是怪事出现了,运行了之后竟然神奇的发现Shell Hardware Detection服务被禁用…… USB接口无法用了求教是哪里出问题了,难道是SystemParametersInfo参数设置有误?

解决方案 »

  1.   

    procedure SetWallPaper(AWallPaper: string);
    var
      iad : IActiveDesktop;
      strFileName:WideString;
    begin
      strFileName := AWallPaper;
      CoCreateInstance(CLSID_ActiveDesktop,
                       nil,
                       CLSCTX_INPROC_SERVER,
                       StringToGUID(SID_IActiveDesktop),
                       iad);
      iad.SetWallpaper(PWideChar(strFileName),0);
      iad.ApplyChanges(AD_APPLY_SAVE);
    end;
      

  2.   

    可能不是这里的代码引起的
    没发现SystemParametersInfo和这个Shell Hardware Detection(硬件自动播放事件通知)服务有啥关联
      

  3.   

    3楼大哥的代码运行到iad.SetWallpaper(PWideChar(strFileName),0);
    就出现了地址错误……