Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как программно заменить обои на рабочем столе 2

Delphi , Рабочий стол , Рабочий стол

Как программно заменить обои на рабочем столе 2

Автор: Владимир Рыбант

Другие подобные советы не изменяют обои, если в 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 для взаимодействия с объектом активной доски.

Обзор кода:

  1. Клаузу uses импортирует необходимые units: ComObj для функциональности COM (Component Object Model) и ShlObj для операций по shell.
  2. Процедура ChangeActiveWallpaper определяет константу CLSID_ActiveDesktop с GUID класса ID активной доски.
  3. В процедуре создается экземпляр интерфейса IActiveDesktop с помощью функции CreateComObject и кастится в тип интерфейса, необходимый для использования.
  4. Метод SetWallpaper вызывается на объекте IActiveDesktop, передавая путь к новому изображению обоев ('c:\windows\forest.bmp') и дополнительный параметр (0), который specifies, как изменить обой (в этом случае, без специальных настроек).
  5. Наконец, метод 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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Рабочий стол ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:00:13/0.0056629180908203/1