Другие подобные советы не изменяют
обои, если в Windows работает режим Active Desktop
Нужно использовать следующее:
uses
ComObj, ShlObj;
procedure ChangeActiveWallpaper;
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
ActiveDesktop.SetWallpaper('c:\windows\forest.bmp', 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
Этим способом можно также изменять обои картинками jpg и gif
Here's the translation of the text into Russian:
Код на Delphi демонстрирует программное изменение обоев рабочего стола Windows, в частности, в ситуациях, когда другие методы могут не работать из-за включенной активной доски. Код использует units ComObj и ShlObj для взаимодействия с объектом активной доски.
Обзор кода:
Клаузу uses импортирует необходимые units: ComObj для функциональности COM (Component Object Model) и ShlObj для операций по shell.
Процедура ChangeActiveWallpaper определяет константу CLSID_ActiveDesktop с GUID класса ID активной доски.
В процедуре создается экземпляр интерфейса IActiveDesktop с помощью функции CreateComObject и кастится в тип интерфейса, необходимый для использования.
Метод SetWallpaper вызывается на объекте IActiveDesktop, передавая путь к новому изображению обоев ('c:\windows\forest.bmp') и дополнительный параметр (0), который specifies, как изменить обой (в этом случае, без специальных настроек).
Наконец, метод ApplyChanges вызывается с флагами AD_APPLY_ALL и AD_APPLY_FORCE, чтобы применить изменения.
Код также может использоваться для изменения обоев в форматах JPEG (.jpg) и GIF.
Альтернативное решение, не использующее COM-объекты:
С помощью units ShlObj можно использовать функцию, изменяющую обой:
function ChangeWallpaper(const NewWallpaper: string): boolean;
var
RegKey: TRegistry;
begin
RegKey := TRegistry.Create(KEY_READ or KEY_WRITE);
try
RegKey.RootKey := HKEY_CURRENT_USER;
RegKey.OpenKey('Software\Microsoft\Internet Explorer\Desktop', False);
RegKey.WriteString('Wallpaper', NewWallpaper);
RegKey.CloseKey();
Result := True;
except
Result := False;
end;
end;
Вы можете вызвать эту функцию, передавая путь к новому изображению обоев, например:
ChangeWallpaper('c:\windows\forest.bmp');
Это решение более простое и не требует создания COM-объектов. Однако, оно работает только для изменения обоев в формате BMP; если вам нужно изменить обои в других форматах (JPEG, GIF и т.д.), то оригинальный код будет необходим.
Автор статьи Владимир Рыбант предлагает программный способ заменить обои на рабочем столе в Windows, используя интерфейс Active Desktop и создавая объект IActiveDesktop.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS