Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

Смена обоев на рабочем столе.   Найти похожие ветки 

 
Ugrael ©   (2004-11-12 11:46) [0]

Доброго времени суток.
Дабы разобраться хочу еаписать типовой сменщик обоев\календарь на рабочий стол.Столкнулся с такой проблемой-из тутошнего FAQ взял код по изменению обоев. Запускаю - визуально ничего не происходит, хотя в свойствах рабочего стола обои меняются.
Может где чего обновить(refresh)надо ?
у меня XP+StyleXP. Но ведь остальные проги работают ?


 
S@lik ©   (2004-11-12 11:55) [1]

вот у меня работает отлично

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;


 
-=SS=- ©   (2004-11-12 13:07) [2]

Или так

procedure ChangeWallpaper(bitmap: string);       {имя файла с изображением: *.bmp}
var pBitmap : pchar;
begin
bitmap:=bitmap+#0;
pBitmap:=@bitmap[1];
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pBitmap, SPIF_UPDATEINIFILE);
end;


 
Ugrael ©   (2004-11-12 13:23) [3]

вариант от S@lik у меня работает, кроме одного нюанса - если я явно указываю путь к файлу. А мне надо что бы ну хотя бы через opendialog.filename. Вот тут возникает проблема - пишкт что тип string а нужен pwidechar.
уж извините за глупые вопросы ...


 
-=SS=- ©   (2004-11-12 13:26) [4]

Ну так в чем проблемы
Var
 S:String;
begin
 ....
 S:=OpenDialog1.FileName;
 ActiveDesktop.SetWallpaper(PWideChar(S), 0);
поидее должно работать


 
Ugrael ©   (2004-11-12 13:51) [5]

мистика, компилятор пропускает, но не работает. а если вывести пенременную S то там такая абракадабра... это же врое как Unicod ?


 
S@lik ©   (2004-11-12 14:01) [6]

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 14:44) [7]

всех уже достал наверное 8)
ActiveDesktop.SetWallpaper(s, 0)
в этой строчке пишет что несовместимые типы .
а если сделать pwidechar(s) - проходит, но не кажет.


 
S@lik ©   (2004-11-12 15:16) [8]

попробуй Pchar(s)


 
Ugrael ©   (2004-11-12 15:45) [9]

требует pwidechar. Что это за хрень ?!
и еще - пример из FAQ и пример -=SS=- заработали. в них понимается только формат BMP. а стандартно винда понимает ведь JPG. Да и в твоем (S@lik ©) примере если явно указать jpg все работает. если давать переменные , то см. самую первую строку.


 
Ugrael ©   (2004-11-12 16:02) [10]

млин, все, разобрался. для получения pwidechar из string используем функцию function StringToOleStr(const Source: string): PWideChar;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.044 c
1-1102705953
Muhan
2004-12-10 22:12
2004.12.26
Как программно сделать файл скрытым?


14-1102493047
Cosinus
2004-12-08 11:04
2004.12.26
Господа сис.админы и пользователи NT-шек. Проблеммы с юникод.


14-1102340478
msguns
2004-12-06 16:41
2004.12.26
Кто похвалит себя лучше всех


6-1097535134
AlexeyM
2004-10-12 02:52
2004.12.26
перехват данных программы


1-1102568108
Progh
2004-12-09 07:55
2004.12.26
Установка формата даты времени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский