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

Вниз

Как изменить фоновую картинку на рабочем столе.   Найти похожие ветки 

 
Yandexman   (2005-06-01 12:53) [0]

Тема была незаслуженно закрыта, поэтому извиняюсь за открытие новой.
вот код программы, совместил 3 и 8, но от этого картинка не менятся!
procedure SetWallpaper(sWallpaperBMPPath: string; bTile: boolean);
var
 reg: TRegistry;
begin
 reg := TRegistry.Create;
 with reg do
 begin
   RootKey:=HKEY_CURRENT_USER;
   OpenKey("Control Panel\Desktop",True);
   WriteString("Wallpaper",sWallpaperBMPPath);
 end;
 reg.Free;
SystemParametersInfo(spi_SetDeskWallpaper, 0, PChar(sWallpaperBMPPath) , spif_UpdateIniFile);
end;


 
Eraser ©   (2005-06-01 15:07) [1]

Yandexman   (01.06.05 12:53)

Что возвращает ф-я SystemParametersInfo?


 
rOOse ©   (2005-06-01 16:28) [2]

procedure tform1.SetWallpaper(sWallpaperBMPPath:String;bTile:boolean);
var
   reg : TRegIniFile;
begin
 reg := TRegIniFile.Create("Control Panel\Desktop" );
 with reg do
   begin
     WriteString( "", "Wallpaper", sWallpaperBMPPath );
     if( bTile )then
       begin
         WriteString("", "TileWallpaper", "1" );
       end
         else
       begin
         WriteString("", "TileWallpaper", "0" );
       end;
  end;
reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, il,SPIF_SENDWININICHANGE );
end;
вот работает


 
rOOse ©   (2005-06-01 16:33) [3]

Удалено модератором


 
rOOse ©   (2005-06-01 16:34) [4]

Удалено модератором


 
rOOse ©   (2005-06-01 16:36) [5]

Удалено модератором


 
rOOse ©   (2005-06-01 16:39) [6]

Удалено модератором


 
vaxluk   (2005-06-01 18:32) [7]

const

CLSID_ActiveDesktop: TGUID = "{75048700-EF1F-11D0-9888-006097DEACF9}";
var

ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
ActiveDesktop.SetWallpaper("", 0); \\путь к картинке
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;


 
vaxluk   (2005-06-01 18:48) [8]

не забудь добавить
uses
ComObj,  ShlObj;


 
rOOse ©   (2005-06-01 18:52) [9]


> [8] vaxluk   (01.06.05 18:48)

упс забыл;)


 
Yandexman   (2005-06-01 19:04) [10]

Люди, вы сами то хоть пробовали то что советуете?
Я же сказал вам что перепробовал все предложенные варианты в ДельфиВорлд, все 6 вариантов и ни один не работает!
А в варианте vaxluk   я не знаю как String привести к PWideChar&


 
Eraser ©   (2005-06-01 19:09) [11]

Yandexman   (01.06.05 19:04) [10]


var
 CurFile: string;
 PCur: PChar;
...
 pcur:=pchar(curfile);
 SystemParametersInfo(SPI_SETDESKWALLPAPER,0,pcur,SPIF_SENDCHANGE);


не может не работать, т.к. работает.


 
vaxluk   (2005-06-01 20:14) [12]

тебе ничего не нужно переводить! Напиши просто путь к нужному файлу, и все прекрасно работает!


 
Antonn ©   (2005-06-02 06:25) [13]


> Тема была незаслуженно закрыта

абсолютно заслуженно, оффтоп пошел...


 
Yandexman   (2005-06-02 07:40) [14]


> не может не работать, т.к. работает.

Попробуй сам что пишеш, а потом утверждай


> абсолютно заслуженно, оффтоп пошел

Люди советуют, и так уверены в том что работает,что даже начинают доказывать это, хотя сами не пробовали.
Мне нужна система нажал кнопку, и мгновенно сменилась картинка, фишки с реестром и SystemParametersInfo в WIndows XP НЕ РАБОТАЮТ! Про другие OC не знаю может для Win9X и годится это.


 
Antonn ©   (2005-06-02 07:44) [15]

Yandexman   (02.06.05 7:40) [14]
не буду ругаться, но ты пробывал это?

procedure SetWallpaper(Value: string);
begin
   SystemParametersInfo(spi_SetDeskWallpaper, 0, PChar(Value) , spif_UpdateIniFile);
end;

после вызова этой процедурки, у меня на рабочем столе картинка меняется сразу, и при перезагрузке остается.


 
Yandexman   (2005-06-02 09:58) [16]


> не буду ругаться, но ты пробывал это?

Только что попробовал на WinXP SP1 и WinXP SP2, картинка менятся только при перезагрузке.
Может быть подскажете в чем может быть трабла?
У всех работает а у меня нет!


 
Antonn ©   (2005-06-02 10:18) [17]

Yandexman   (02.06.05 9:58) [16]
конвертни в bmp


 
Yandexman   (2005-06-02 11:32) [18]

Как енто?
А как GIF и GPEG?


 
Eraser ©   (2005-06-02 14:39) [19]

Yandexman   (02.06.05 07:40) [14]

Это из рабочей программы.


 
Yandexman   (2005-06-02 20:18) [20]


> конвертни в bmp

Нифига, таже лажа.


 
Eraser ©   (2005-06-02 20:46) [21]

Yandexman   (02.06.05 20:18) [20]

Ну значит несудьба...


 
Yandexman   (2005-06-03 06:35) [22]


> Ну значит несудьба...

Помошнички, все тут гении собрались, а заменить заставку на рабочем столе не могут :-[


 
Antonn ©   (2005-06-03 07:02) [23]


> Помошнички, все тут гении собрались, а заменить
> заставку на рабочем столе не могут :-[

речь шла не о заставке.


 
Yandexman   (2005-06-08 13:40) [24]


> речь шла не о заставке.

О фоне конечно, очепятался :()


 
Zeqfreed ©   (2005-06-08 15:00) [25]

unit setwall;

interface

uses
Windows, SysUtils, Registry, JPEG, Graphics;

function SetWallpaper(filename : String) : boolean;

implementation

function Jpg2Bmp(const filename : String) : String;
var
jpg : TJPEGImage;
bmp : TBitmap;
windir : String;
buff : array[0..MAX_PATH - 1] of Char;
begin
Result := "";

jpg := TJPEGImage.Create;
try
 jpg.CompressionQuality := 100;
 jpg.LoadFromFile(filename);
 bmp := TBitmap.Create;
 try
  bmp.Assign(jpg);

  GetWindowsDirectory(buff, MAX_PATH);
  windir := buff;
  Result := windir + "\" + ChangeFileExt(ExtractFileName(filename), ".bmp");

  bmp.SaveToFile(Result);
 finally
  bmp.Free;
 end;  
finally
 jpg.Free;
end;
end;

function SetWallpaper(filename : String) : boolean;
var
r : TRegistry;
ext : String;
begin
Result := false;
ext := AnsiUpperCase(ExtractFileExt(filename));

if ext = ".JPG" then
 filename := jpg2bmp(filename)
else if ext <> ".BMP" then Exit;

r := TRegistry.Create;
try
 try
  r.RootKey := HKEY_CURRENT_USER;
  r.OpenKey("Control Panel\Desktop", false);
  r.WriteString("Wallpaper", filename);
  r.CloseKey;

  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(filename), SPIF_SENDCHANGE);

  Result := true;
 except
  MessageBeep(MB_ICONHAND);
  MessageBox(0, "Error while accessing registry", "SetWallpaper", MB_OK + MB_ICONWARNING);
 end;
finally
 r.Free;
end;
end;

end.


&#239;&#240;&#238;&#226;&#229;&#237;&#238; &#237;&#224; WinXP Pro SP 2
&#207;&#240;&#232;&#236;&#229;&#240; &#232;&#241;&#239;&#238;&#235;&#252;&#231;&#238;&#226;&#224;&#237;&#232;&#255;:
SetWallpaper("C:\Images\wallpaper.jpg");


 
Zeqfreed ©   (2005-06-08 15:02) [26]

Преверено  на WinXP Pro SP 2
Пример использования:


Блин, почему-то у меня из клиента Piter"ского не отправляются посты, а при копировании забыл сменить раскладку :)


 
Yandexman   (2005-06-08 17:08) [27]

А как же с GIF? ведь XP держит анимированные картинки!


 
Zeqfreed ©   (2005-06-08 17:14) [28]

Yandexman   (08.06.05 17:08) [27]
Придется разбивать на кадры (с помощью какого-нибудь компонента, возможно, из RxLib) и по таймеру менять!


 
Yandexman   (2005-06-23 06:47) [29]


> Придется разбивать на кадры (с помощью какого-нибудь компонента,
> возможно, из RxLib) и по таймеру менять!

Так и геморой заработать можно!Ведь мало разбить еще и конвертить в битмап нужно.



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

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

Наверх




Память: 0.53 MB
Время: 0.039 c
14-1122206843
Sim2
2005-07-24 16:07
2005.08.14
Paid


14-1121764709
reticon
2005-07-19 13:18
2005.08.14
Загрузка процессора и svchost.exe


6-1115076223
Algo
2005-05-03 03:23
2005.08.14
Как из программы установить соединение?


1-1122216014
Alex77777
2005-07-24 18:40
2005.08.14
Как получить список файлов в директории?


3-1120723703
cvg
2005-07-07 12:08
2005.08.14
Подскажите новичку -- связь Delphi и MySQL