![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Смена обоев на рабочем столе. [D7, WinXP]
Ugrael © (2004-11-12 11:46:00)Доброго времени суток.
Дабы разобраться хочу еаписать типовой сменщик обоев\календарь на рабочий стол.Столкнулся с такой проблемой-из тутошнего FAQ взял код по изменению обоев. Запускаю - визуально ничего не происходит, хотя в свойствах рабочего стола обои меняются.
Может где чего обновить(refresh)надо ?
у меня XP+StyleXP. Но ведь остальные проги работают ?
Ugrael (2004-11-12 16:02:00) [1]млин, все, разобрался. для получения pwidechar из string используем функцию function StringToOleStr(const Source: string): PWideChar;
Ugrael (2004-11-12 15:45:00) [2]требует pwidechar. Что это за хрень ?!
и еще - пример из FAQ и пример -=SS=- заработали. в них понимается только формат BMP. а стандартно винда понимает ведь JPG. Да и в твоем (S@lik ©) примере если явно указать jpg все работает. если давать переменные , то см. самую первую строку.
S@lik (2004-11-12 15:16:00) [3]попробуй Pchar(s)
Ugrael (2004-11-12 14:44:00) [4]всех уже достал наверное 8)
ActiveDesktop.SetWallpaper(s, 0)
в этой строчке пишет что несовместимые типы .
а если сделать pwidechar(s) - проходит, но не кажет.
S@lik (2004-11-12 14:01:00) [5]procedure ChangeActiveWallpaper(S:string);
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
ActiveDesktop.SetWallpaper(s, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
Вызываеш процедуру вот так
if OpenDialog1.Execute then
ChangeActiveWallpaper(OpenDialog1.FileName);
Ugrael (2004-11-12 13:51:00) [6]мистика, компилятор пропускает, но не работает. а если вывести пенременную S то там такая абракадабра... это же врое как Unicod ?
-=SS=- (2004-11-12 13:26:00) [7]Ну так в чем проблемы
Var
S:String;
begin
....
S:=OpenDialog1.FileName;
ActiveDesktop.SetWallpaper(PWideChar(S), 0);
поидее должно работать
Ugrael (2004-11-12 13:23:00) [8]вариант от S@lik у меня работает, кроме одного нюанса - если я явно указываю путь к файлу. А мне надо что бы ну хотя бы через opendialog.filename. Вот тут возникает проблема - пишкт что тип string а нужен pwidechar.
уж извините за глупые вопросы ...
-=SS=- (2004-11-12 13:07:00) [9]Или так
procedure ChangeWallpaper(bitmap: string); {имя файла с изображением: *.bmp}
var pBitmap : pchar;
begin
bitmap:=bitmap+#0;
pBitmap:=@bitmap[1];
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pBitmap, SPIF_UPDATEINIFILE);
end;
S@lik (2004-11-12 11:55:00) [10]вот у меня работает отлично
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;