Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.012 c
10-1093590350
AntonSh
2004-08-27 11:05
2005.06.06
COM сервер


3-1114680917
Bocman
2005-04-28 13:35
2005.06.06
автоинкремент в Paradox


3-1114954156
Fedor
2005-05-01 17:29
2005.06.06
Переменые для параметрического запроса в IBDataSet


6-1111128147
leonidus
2005-03-18 09:42
2005.06.06
Копирование файлов по локальной сети


1-1116631879
Masta Hookah
2005-05-21 03:31
2005.06.06
Canvas





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский