Текущий архив: 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.
ïðîâåíî íà WinXP Pro SP 2
Ïðèìåð èñïîëüçîâàíèÿ: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.51 MB
Время: 0.011 c