Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/43: Рейтинг темы: голосов - 43, средняя оценка - 4.98
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096

Смена обоев рабочего стола.

07.02.2011, 18:16. Показов 9202. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Я меняю например картинку на рабочем столе вот этим способом.
C++
1
2
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "Image.bmp",
   SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
Так вот. Есть ли команды, замостить изображение, растянуть или в центре? Просто он просто растягивает изображение, а мне надо в центре поместить. Буду раз за любую помощь. Спасибо!
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2011, 18:16
Ответы с готовыми решениями:

Программная смена обоев рабочего стола...
Как в Windows XP программно сменить обои рабочего стола? Пробовал сделать так: ...

Смена изображения рабочего стола
Доброго времени суток. Возможно ли организовать контейнер, где будет храниться изображение, которое будет устанавливаться на рабочий стол?...

Программная смена обоев. Черный экран на Win 8.1
Меняю обои на рабочем столе с помощью: SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "1.bmp", SPIF_UPDATEINIFILE | SPIF_SENDCHANGE) ...

5
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
07.02.2011, 18:21
Смотри
программно сменить картинку на рабочем столе.

06 сен 2001 (четверг), 09:36:30
захотел программно сменить картинку на рабочем столе. Обои
т.е... я залез в реестр изменил нужную строку. Все нормально. в
реестре изменилось. Но сам виндовс не обновился. Т.е картинка не
сменилась. Потом, когда я запускаю какуюнить игру, она меняется. А так
нет. Как мне обновить виндовс? перерисовать чтоли.
Ответить.
Ответ 1:
Вот так:
Procedure TForm1.FormCreate(SEnder: TObject);
var
St : string;
Begin
St := 'C:\MyWallPaper.Bmp';
SystemParametersInfo(SPI_SETDESKWALLPAPE R,UINT(St),nil,SPIF_SEndCHANGE);
End;
Ответ 2:
Попробуй покапаться с АПИ - SystemParametersInfo
или вот тебе компонент:
unit Walpaper;
interface
uses
{$IFDEF WIN32} Windows, RegisTry, {$Else} WinTypes, WinProcs, IniFiles, {$EndIF}
Classes, Controls, SysUtils;
Type
TWallPaper = class(TComponent)
Private
PC: Array[0..$FF] of Char;
{$IFDEF WIN32}
Reg: TRegisTry;
{$Else}
Reg: TIniFile;
WinIniPath: string;
{$EndIF}
Function GetWallpaper: string;
Procedure SetWallpaper(Value: string);
Function GetTile: Boolean;
Procedure SetTile(Value: Boolean);
Function GetStretch: Boolean;
Procedure SetStretch(Value: Boolean);
protected
{$IFNDEF WIN32}
Constructor Create(aOwner: TComponent); override;
{$EndIF}
Public
published
Property Wallpaper: string read GetWallpaper write SetWallpaper;
Property Tile: Boolean read GetTile write SetTile;
Property Stretch: Boolean read GetStretch write SetStretch;
End;
Procedure Register;
implementation
{$IFNDEF WIN32}
Constructor TWallpaper.Create(aOwner: TComponent);
Begin
inherited Create(aOwner);
GetWindowsDirectory(PC, $FF);
WinIniPath := StrPas(PC) + '\WIN.INI';
End;
{$EndIF}
Function TWallpaper.GetWallpaper: string;
Begin
{$IFDEF WIN32}
Reg := TRegisTry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\Control Panel\desktop\', False);
Result := Reg.Readstring('Wallpaper');
Reg.Free;
{$Else}
Reg := TIniFile.Create(WinIniPath);
Result := Reg.Readstring('Desktop', 'Wallpaper', '');
Reg.Free;
{$EndIF}
End;
Procedure TWallpaper.SetWallpaper(Value: string);
Begin
If not (csDesigning in ComponentState) and
not (csLoading in ComponentState) and
not (csReading in ComponentState) Then
Begin
StrPCopy(PC, Value);
SystemParametersInfo(spi_SetDeskWallpape r, 0, @PC, spif_UpdateIniFile);
End;
End;
Function TWallpaper.GetTile: Boolean;
Begin
{$IFDEF WIN32}
Reg := TRegisTry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\Control Panel\desktop\', False);
Result := Boolean(StrToInt(Reg.Readstring('TileWal lpaper')));
Reg.Free;
{$Else}
Reg := TIniFile.Create(WinIniPath);
Result := Reg.ReadBool('Desktop', 'TileWallpaper', False);
Reg.Free;
{$EndIF}
End;
Procedure TWallpaper.SetTile(Value: Boolean);
Begin
If not (csDesigning in ComponentState) and
not (csLoading in ComponentState) and
not (csReading in ComponentState) Then
Begin
{$IFDEF WIN32}
Reg := TRegisTry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\Control Panel\desktop\', False);
Reg.Writestring('TileWallpaper', IntToStr(Integer(Value)));
Reg.Free;
{$Else}
Reg := TIniFile.Create(WinIniPath);
Reg.WriteBool('Desktop', 'TileWallpaper', Value);
Reg.Free;
{$EndIF}
SetWallpaper(Wallpaper);
End;
End;
Function TWallpaper.GetStretch: Boolean;
var
i: Integer;
Begin
{$IFDEF WIN32}
Reg := TRegisTry.Create;
Try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\Control Panel\desktop\', False);
i := StrToInt(Reg.Readstring('WallpaperStyle' ));
Except
End;
Reg.Free;
{$Else}
Reg := TIniFile.Create(WinIniPath);
i := Reg.ReadInteger('Desktop', 'WallpaperStyle', 0);
Reg.Free;
{$EndIF}
Result := i = 2;
End;
Procedure TWallpaper.SetStretch(Value: Boolean);
var
v: Integer;
Begin
If not (csDesigning in ComponentState) and
not (csLoading in ComponentState) and
not (csReading in ComponentState) Then
Begin
If Value Then v := 2 Else v := 0;
{$IFDEF WIN32}
Reg := TRegisTry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('\Control Panel\desktop\', False);
Reg.Writestring('WallpaperStyle', IntToStr(v));
Reg.Free;
{$Else}
Reg := TIniFile.Create(WinIniPath);
Reg.WriteInteger('Desktop', 'WallpaperStyle', v);
Reg.Free;
{$EndIF}
SetWallpaper(Wallpaper);
End;
End;
Procedure Register;
Begin
RegisterComponents('JohnUtilEnd;
End.
Ответ 3:
WinAPI:
BOOL SystemParametersInfo(
UINT uiAction, // system parameter to query or set
UINT uiParam, // depEnds on action to be taken
PVOID pvParam, // depEnds on action to be taken
UINT fWinIni // user profile update flag
);
uiAction := SPI_SETDESKWALLPAPER Sets the desktop wallpaper.
pvParam := 'Имя BMP файла'#0
uiParam := 0
fWinIni := SPIF_UPDATEINIFILE
Ответ 4:
Программка смены обоев на рабочем столе.
Имя файла с картинкой передается через параметр.
Текст файла change.dpr:
{-- change.dpr --}
program change;
uses
windows;
var
s: string;
Begin
s := paramStr(1);
SystemParametersInfo(SPI_SETDESKWALLPAPE R, 0, @S[1],
SPIF_UPDATEINIFILE OR SPIF_SEndWININICHANGE);
End.
{-- End of change.dpr --}
Запускаешь:
change.exe "имя файла с картинкой"

Источник
1
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
07.02.2011, 18:28  [ТС]
iama, Простите, Вы меня наверное не так поняли. Наверное я не правильно изложился . Короче менять картинку я могу, но просто мне не очень по душе то что он ее растягивает, а мне нужно поместить изображение в центре экрана и не изменять размер
0
 Аватар для iama
1360 / 988 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
07.02.2011, 18:38
да всё я правильно понял, там есть процедурки SetTile и SetStretch, которые замощают или растягивают фон, тоисть "по центру" я не кинул, сейчас кину

Добавлено через 2 минуты
вот кусок на дельфи
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uses Registry, WinProcs;
 
procedure SetWallpaper(sWallpaperBMPPath: string; bTile: boolean);
var
 
  reg: TRegIniFile;
begin
  //     Изменяем ключи реестра
  //     HKEY_CURRENT_USER
  //     Control Panel\Desktop
  //     TileWallpaper (REG_SZ)
  //     Wallpaper (REG_SZ)
 
  reg := TRegIniFile.Create('Control Panel\Desktop');
  with reg do
  begin
    WriteString('', 'Wallpaper',
      sWallpaperBMPPath);
    if (bTile) then
    begin
      WriteString('', 'TileWallpaper', '1');
    end
    else
    begin
      WriteString('', 'TileWallpaper', '0');
    end;
  end;
  reg.Free;
  // Оповещаем всех о том, что мы изменили системные настройки
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil,
 
    {Эта строка - продолжение предыдущей} SPIF_SENDWININICHANGE);
end;
влом переводить, добавь Delphi Unit в проект, и скопипасть это.
2
 Аватар для Vlad_IT
1452 / 360 / 61
Регистрация: 03.04.2010
Сообщений: 2,096
07.02.2011, 19:22  [ТС]
iama, Спасибо большое! Разберусь.
Перевести думаю не составит большой проблемы, главное основа есть. Еще раз большое спасибо.
0
4 / 3 / 2
Регистрация: 20.01.2018
Сообщений: 71
15.07.2019, 16:53
Цитата Сообщение от iama Посмотреть сообщение
добавь Delphi Unit в проект, и скопипасть это.
Не знал о таком, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.07.2019, 16:53
Помогаю со студенческими работами здесь

Заставка рабочего стола
Всем добро! :senor: Подскажите как программно получить в переменную путь к файлу который в данный момент установленн как заставка...

Замена рабочего стола
Доброго времени суток!!! Как заменить рабочий стол своим окном?

Заставка рабочего стола
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "pic.bmp", SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); как сделать чтоб было в полный...

Изменение изображения рабочего стола
Нужно изменить фон. рис. рабочего стола без перезагрузок и т.п., использую SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,...

Блокировка рабочего стола и меню пуск
Здравствуйте, делаем в заведении типа компьютерного клуба доступ только к 1 сайту, для этого нужно заблокировать возможность пользования...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru