Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Смена обоев рабочего стола [WinXP]


uniken1 ©   (2009-06-17 07:07:00) 

Написал программу для смены обоев рабочего. Общий принцип работы такой:
Растягиваю форма на весь экран, делаю ее StayOnTop и
Windows.PaintDesktop(Form1.Canvas.Handle);
Сохраняю в bmp, делаю свои изменения и сохраняю в файл.
Применяю для рабочего стола
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(FileName), SPIF_SENDCHANGE);

Все работает, но иногда картинка мелькает и сразу исчезает, хотя если нажать Ctrl-Alt-Del(появится окно Безопасность Windows), то примененная мной картинка там появляется.

В чем может быть причина?

PS. тоже самое всегда происходит сWinServer 2008...


Cobalt   (2009-06-22 13:56:00) [1]

Ох, я тоже в далеком 2000-ом писал такую прогу, которая каждый день меняла обои...
Поискать что ли её исходники?


uniken1   (2009-06-17 14:54:00) [2]


> This parameter can be zeroif you don't want to update the
> user profile or broadcast the WM_SETTINGCHANGE message,
> or it can be one or more of the following values.


В моем случае 0 ни на что не влияет


Плохиш   (2009-06-17 14:16:00) [3]


If a system parameter is being set, specifies whether the user profile is to be updated, and if so, whether the WM_SETTINGCHANGE message is to be broadcast to all top-level windows to notify them of the change.

This parameter can be zero if you don'twant to update the user profileor broadcast the WM_SETTINGCHANGE message, or it can be one or more of the following values.


Плохиш   (2009-06-17 14:13:00) [4]


> Т.е. если используется SPIF_UPDATEINIFILE то картинка рабочего
> стола применяется как постоянная, а если только SPIF_SENDCHANGE,
>  то действует только в течении одного сеанса(что мне и надо).
>
>

Там этого не написано.


uniken1   (2009-06-17 13:03:00) [5]

Вообще я пользовался этим
http://msdn.microsoft.com/en-us/library/ms724947.aspx
В самом конце там описание
SPIF_UPDATEINIFILE - Writes the new system-wide parameter setting to the user profile.
SPIF_SENDCHANGE - Broadcasts the WM_SETTINGCHANGE message after updating the user profile

Т.е. если используется SPIF_UPDATEINIFILE то картинка рабочего стола применяется как постоянная, а если только SPIF_SENDCHANGE, то действует только в течении одного сеанса(что мне и надо).
После всех экпериментов напрашиваетя предположение что программа запускается раньше explorer'a и обои меняются для пользователя SYSTEM


Плохиш   (2009-06-17 12:01:00) [6]

SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE

PS. http://support.microsoft.com/kb/97142


KSergey   (2009-06-17 11:45:00) [7]

я в этом не шарю, но есть подозрение, что подменяется какая-то не на фоновая картинка в коде.
Т.к. та картинка, что возникает при Ctrl-Alt-Del - это не та, что устанавливает пользователь.

Может почитать какие ещ еесть параметры у SystemParametersInfo подходящие? (я про константы в первом и последнем параметре)


Наверх

Титульная страница Поиск, карта сайта Написать письмо