Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизПроблемма с установкой фона рабочего стола Найти похожие ветки
← →
zero-g © (2005-04-13 15:17) [0]Доброго времени суток, дело вобщем такое...
Написал программку для установки фона рабочего стола по времени...
Под ХП работает без проблем, в 98 и 2k (линолиум не тестил, т.к. негде) Фон не устанавливается, если быть точнее он устанавливается, но рабочий стол не обновляет фон!
Хоть убей, мурыжил мурыжил, так и ничего недо шло...
В прошедуре установки редактирую реестр, сообщаю системе что мол готово и обновляю раб стол, и нифига...
Вот процедура...
uses Registry, WinProcs,Messages;
....
procedure SetWallpaper(sWallpaperBMPPath : String; bTile : byte);
var
reg : TRegIniFile;
begin
reg := TRegIniFile.Create("Control Panel\Desktop" );
with reg do begin
WriteString( "", "Wallpaper", sWallpaperBMPPath );
if bTile = 1 then //по центру
begin
WriteString("", "TileWallpaper", "0" );
WriteString("", "WallpaperStyle", "0" );
end;
if bTile = 2 then //по замостить
begin
WriteString("","TileWallpaper", "1");
WriteString("","WallpaperStyle", "0");
end;
if bTile = 3 then // растянуть
begin
WriteString("", "TileWallpaper", "0" );
WriteString("", "WallpaperStyle", "2" );
end;
end;
reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil,SPIF_SENDWININICHANGE );
SendMessage(FindWindow("Progman", "Program Manager"),WM_COMMAND,$A065,0);
end;
....
А вот сама програмка, если кому интересно...
http://alexshad.pisem.net/file/wallp.zip
Помогите кто чем сможет...
← →
kami © (2005-04-13 15:58) [1]А как насчет
{ для bmp}Wallpaper := "C:\windows\ACD Wallpaper.bmp";
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
или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.jpg", 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
(c) Delphi Russian KnowLedge Base
← →
zero-g © (2005-04-13 16:31) [2]to kami
Ну вот это я пробывал (если не ошибаюсь), такая же картина
Wallpaper := "C:\windows\ACD Wallpaper.bmp";
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, PChar(Wallpaper), SPIF_SENDCHANGE)
А вот за com-интерфейс спасиб :)
Попробую :)
← →
Lin7 (2005-04-13 16:56) [3]
> zero-g © (13.04.05 15:17)
Попробуй обновить Desktop так:PostMessage(DeskTopHandle, WM_KEYDOWN, VK_F5, 0);
PostMessage(DeskTopHandle, WM_KEYUP, VK_F5, 1 shl 31);
← →
Lin7 (2005-04-13 17:02) [4]
> zero-g © (13.04.05 15:17)
Забыл:
DeskTopHandle - хенд ListView"а рабочего стола:Function GetDeskTop:HWND;
var stt:string;
begin
result := FindWindow("ProgMan", nil);
result := GetWindow(Result, GW_CHILD); // это root десктопа
result := GetWindow(Result, GW_CHILD); // это ListView с иконками
SetLength(Stt, 40);
GetClassName(Result, PChar(Stt), 39);
if PChar(Stt) <> "SysListView32" then result := 0
end;
← →
zero-g © (2005-04-13 17:38) [5]to Lin7
Сенкс :)
← →
zero-g © (2005-04-14 06:12) [6]to kami
Что то я понять не могу
Делаешь так
ActiveDesktop.SetWallpaper(PWideChar(sWallpaperBMPPath),0);
где sWallpaperBMPPath путь до bmp
Он ставит нашу бмп в PrevWallpaper в на десктопе все фон уберается, в реестве остается таже самая, что была по умолчанию...
Длеаешь так
ActiveDesktop.SetWallpaper("C:\Delphi\walp\mywallp.bmp",0);
Все работает как надо.... и редетите все что надо...
Почему через переменну не прокатывает???
← →
kami © (2005-04-14 14:54) [7]Объяви sWallpaperBMPPath как WideString.
← →
zero-g © (2005-04-17 20:12) [8]Спасиб всем, я сделал :)
uses ComObj,ShlObj;
****
procedure SetWallpaper(sWallpaperBMPPath : String; bTile : byte);
const
CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var
ActiveDesktop: IActiveDesktop;
t_ : WideString;
wp : _tagWALLPAPEROPT;
begin
t_ := sWallpaperBMPPath;
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
wp.dwSize := sizeof(_tagWALLPAPEROPT);
if bTile = 3 then //растянуть
wp.dwStyle := WPSTYLE_STRETCH;
if bTile = 2 then //замостить
wp.dwStyle := WPSTYLE_MAX;
if bTile = 1 then //поцентру
wp.dwStyle := WPSTYLE_CENTER;
ActiveDesktop.SetWallpaperOptions(wp,0);
ActiveDesktop.SetWallpaper(PWideChar(t_),0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
← →
zero-g © (2005-04-18 05:45) [9]Да, у меня еще один вопрос по выше написанной процедуре...
А как убить com-объект из памяти, что потребление RAM шло не по возрастающей, а обновил (потребление памяти взлетело), по завершению размер потребляемой памяти стал прежним.
Т.е. мы создаем объект
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
А как теперь в конце его убить?
дык ActiveDesktop.Free; Неканает.... И получается что у нас потребление памяти ростет по возрастающей....
А хотелось бы чтоб, создал - убил, создал - убил... ну и тд :)))
← →
Virgo_Style © (2005-04-18 08:43) [10]По идее, ActiveDesctop.Release ?
← →
zero-g © (2005-04-18 13:05) [11]to Virgo_Style
>По идее, ActiveDesctop.Release ?
Такого нет.
← →
Virgo_Style © (2005-04-18 14:20) [12]Посмотрел несколько примеров - убиения не обнаружил %-)
Попробовал CreateComObject несколько раз - возрастания потребления памяти не заметил.
Честно говоря - больше помочь ничем не могу, некомпетентен %-).
← →
Virgo_Style © (2005-04-18 14:28) [13]http://www.interface.ru/fset.asp?Url=/borland/decom_3.htm :
// Создаем COM-объект и запрашиваем у него интерфейс
ComServer := CreateComObject(IComServer) as IComServer;
// Работаем с интерфейсом
ComServer.DoSomething;
// Освобождаем интерфейс
ComServer := NIL;
← →
zero-g © (2005-04-18 16:50) [14]to Virgo_Style
Спасибо
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c