Mach dir nix draus. Bin ja selbst nicht fehler-resistent. Die Prozedur "ChangeWallpaper" (die aus meinem Programm, meine ich!) sollte besser so aussehen:
Delphi-Quellcode:
procedure ChangeWallpaper(const szFilename: string);
var
oleres : HRESULT;
actdesk : IActiveDesktop;
compopt : TComponentsOpt;
dwReserved : dword;
begin
actdesk := CreateComObject(CLSID_ActiveDesktop,oleres) as IActiveDesktop;
if(oleres = S_OK) then begin
ZeroMemory(@compopt,sizeof(compopt));
compopt.dwSize := sizeof(compopt);
dwReserved := 0;
actdesk.GetDesktopItemOptions(compopt,dwReserved);
// Active Desktop ist aktiv
if(compopt.fActiveDesktop) then begin
actdesk.SetWallpaper(pwidechar(widestring(szFilename)),0);
actdesk.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
exit;
end
end;
// im Fehlerfall, bzw. ohne Active Desktop
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,pointer(szFilename),
SPIF_SENDWININICHANGE);
end;