Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

Проблемма с установкой фона рабочего стола   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.06.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1116503539
VMcL
2005-05-19 15:52
2005.06.06
А что только что в скрипте поменяли,


1-1116501266
microcomp
2005-05-19 15:14
2005.06.06
Дельфийский ассемблер


3-1114546513
suharew
2005-04-27 00:15
2005.06.06
Как с помощью SQL показать первые 10 записей из базы


6-1111268616
Radgar
2005-03-20 00:43
2005.06.06
Проблема приема ReceiveText с несколькоми клиентами


14-1116241435
ANB
2005-05-16 15:03
2005.06.06
Хочу опять в СССР