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

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

Работа SystemParametersInfo [D4, D6, Win95/98, Win2k]


YY ©   (2002-12-29 22:56:00) 

Вопрос, собственно, не столько по WinApi, сколько по системе.
Не подскажет ли кто-нибудь, как SystemParametersInfoработает с реестром и файлами настроек Windows?

Например, в программе, меняющей обои, есть строка:

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil, SPIF_SENDWININICHANGE or SPIF_UPDATEINIFILE);

При определённых настройках системы фон нормально меняется, но при других, функция вместо этого пишет в файл Win.iniпараметр Wallpaper=путь_к_картинке, а в реестре вместо пути к картинке ставит "(None)". Картинка после этого перестаёт отображаться.
Хотелось бы узнать, от чего это зависит.
Конечно, мне могут ответить, что лучше переписать код (по-моему, всё дело в SPIF_UPDATEINIFILE), но, к сожалению, я не имею такой возможности из-за проблем с совместимостью разных версий Delphi.


YY   (2002-12-30 01:54:00) [1]

> > Например, в программе, меняющей обои
> Какая такая?

Вот урезанная процедура:


procedure SetWallp(WallpPath:String);
var
Reg:TRegistry;
begin
Reg:=TRegistry.create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.CloseKey;
if Reg.OpenKey("Control Panel\Desktop",False)=False then begin Reg.Destroy;Exit;end;
if Reg.ValueExists("Wallpaper")=False then begin Reg.Destroy;Exit;end;
Reg.WriteString("WallPaper",WallpPath);
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,nil,SPIF_SENDWININICHANGE or SPIF_UPDATEINIFILE);
Reg.CloseKey;
Reg.Destroy;
end;


Описываю свои действия:
Создал форму, кунул на неё кнопку и Edit и вызывал эту процедуру при нажатии на кнопку с параметром из Edit"а.
Запустил полученное приложение на Windows 2000. Картинка меняется, в реестре есть путь. После перезагрузки картинка тоже висит.
Перезагрузился под Windows 95. Сначала и в win.ini и в реестре писалось "(None)". Затем я из настроек рабочего стола поустанавливал разные картинки - всё менялось. Затем ещё раз запустил программу - картинка появилась на рабочем столе, но в реестре стоит "(None)" => после перезагрузки картинки не будет.

Везде указывались реальные пути картинок в формате *.BMP.
В общем, какие-то разные эффекты получаются в зависимости от того, что я делаю.

> > При определённых настройках ... нормально меняется, но при других, функция ...
> Каких именно?

Вот именно это я и хочу узнать.

Точно знаю, что эта процедура (по крайней мере, в более полном виде) работала на множестве машин и операционок, в частности, на Win9X.


Rouse_   (2002-12-29 23:27:00) [2]

> Например, в программе, меняющей обои
Какая такая?
При определённых настройках ... нормально меняется, но при других, функция ...
Каких именно?
Хотелось бы узнать, от чего это зависит.
От стиля написания программы, и спрособа опроса системы о настройках

Желаю успехов

ЗЫ: Больше конкретики


Наверх

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