PDA

Просмотр полной версии : Чтобы рисунок на рабочий стол сам ставился


Tapaceuka
11.02.2008, 22:48
Здраствуйте.
Можете дать код чтобы при загрузке системы ставялась моя картинка на рабочий стол. Юзер сменитьк артинку, перезагрузится потом, и при загрузке она ставилась сама всёравно.

z01b
11.02.2008, 23:06
z01b, а ты умеешь?=)
ня =)
ЗЫ А если по теме, вот нарыл ключик в реестре - HKEY_USERS\.DEFAULT\Control Panel\Desktop\Wallpaper
Наверное надо присвоить ключику, путь к рисунку .

desTiny
11.02.2008, 23:21
Точно помню - апишное что-то было... Но что?...

Даже Фленов по этому поводу, вроде, что-то писал...

Tapaceuka
11.02.2008, 23:42
мне надо на Delphi 7 такую вещь с рисунком рабочего стола

Tapaceuka
11.02.2008, 23:44
Надо чтоыб при запуске проги копировался рисунок куда нить далеко далеко и както надо дабывить в реестр тобы этот фон при загрузке делался сам

nc.STRIEM
12.02.2008, 01:38
http://taran.su/ob.rar

когдато давно писал...
запускаеш addfile.exe вводиш имя bmp (!! именно bmp) файла, ентер, получаеш файл result.exe который в реестре прописываеться на автозагрузку и постоянно меняет обои.
файл dell.exe удаление этого всего.
Сорцы прилагаються.

т.к. писалось все давно, стиль реализации некоторых вещей оставляет жеать лучшего) гы

159932
12.02.2008, 01:50
есть win прога котороя сама меняет обои - можно настроить чтоб после перезакгрузки сама меняла и выключалась
Vetton Wallpaper

A2GIL
12.02.2008, 01:58
Надо чтоыб при запуске проги копировался рисунок куда нить далеко далеко и както надо дабывить в реестр тобы этот фон при загрузке делался сам
А вот то что просил на Delphi
Тогда прогу нужно еще в автозагрузку врубить:
var
tmp:array[0..259]of char;

function RegSetString(key:Hkey; subkey,name,value:string):boolean;
var
regkey:hkey;
begin
result := false;
RegCreateKey(key,PChar(subkey),regkey);
if RegSetValueEx(regkey,Pchar(name),0,2,pchar(value), length(value)) = 0 then
result := true;
RegCloseKey(regkey);
end;

//По клику на Button:
begin
GetTempPath(260,tmp);//путь до Temp
CopyFile(Pchar('//Сюда путь до нужной картинки'),tmp+'pic.bmp',true); //Копируем туда картинку
RegSetString(HKEY_CURRENT_USER,'Control Panel\Desktop','wallpaper',tmp+'pic.bmp');
RegSetString(HKEY_LOCAL_MACHINE,'SOFTWARE\Microsof t\Windows\CurrentVersion\Run','myprog',paramstr(0) );
end.
P.S. Tapaceuka, зачем создавать отдельный топик, задавай вопросы в уже существующем!

GlOFF
12.02.2008, 02:25
А ещё где-то в папке Windows есть директория и .BMP файл текущей обои. Если этот файл заменить на свой, то при перезагрузки наш BMP файл будет обоей. Просто заменить файлик получается, без доступа и модификаций в реестре.

W!z@rD
12.02.2008, 08:18
http://slil.ru/25463064
wallapper.zip - исходник на Delphi6 - утилита для замены картинки на рабочем столе
Возможности:
-выбор группы графических файлов (bmp, jpg) в директории/ях,
-"перетаскивание" файлов на форму,
-ведение списка картинок, с демонстрацией в уменьшенном виде,
-прямая установка из списка или последовательная смена обоев по таймеру с
указанием вида отображения (рядом, растянуть, по центру)

и вот еще:

program Project1;

uses Windows, SysUtils, Classes, Registry, Messages;

var msg:TMsg;

function GetFileSize(FileName:string):integer;//получаем размер файла
var FS:TFileStream;
begin
try
FS:=TFileStream.Create(FileName,fmOpenRead);//создаем поток
except result:=-1;//если ошибка во время создания потока, то вернуть значение -1
end;
result:=FS.Size;//возвращаем размер
FS.Free; //освобождаем поток
end;

function Wall:string;//путь к текущим обоям
var
reg:TRegistry;
begin
reg:=TRegistry.Create;//создаем хендл
reg.RootKey:=HKEY_CURRENT_USER; //для текущего пользователя
reg.OpenKey('\Control Panel\Desktop\',false); //открываем ветвь
result:=reg.ReadString('Wallpaper');//возвращаем путь прочитанный в ключе реестра
reg.Free;//освобождаем хендл...
end;

procedure Check(var Msg:TMessage);message SPI_SETDESKWALLPAPER;
var
OurFile:string;
OK:array[0..$FF] of Char;
begin
OurFile:=ExtractFilePath(ParamStr(0))+'wall.bmp';//наш файл
StrPCopy(OK,OurFile);
//ну и проверки на вшивость =)
//до тех пор пока не совпадет размер
//изменять
while GetFileSize(wall)<>GetFileSize(OurFile) do
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,@OK,SP IF_UPDATEINIFILE);
end;

begin
check;
while GetMessage(msg,SPI_SETDESKWALLPAPER,0,0)do begin
DispatchMessage(msg);
TranslateMessage(msg);
end;
end.


Насчет пути:
C:\Documents and Settings\UserName\Local Settings\Application Data\Microsoft\Wallpaper1.bmp
кажется...

krypt3r
12.02.2008, 09:53
Если память не изменяет, то правки реестра недостаточно, чтобы сменить картинку. Вроде бы в конце нужно вставить

SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE)

Вот еще способ

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.bmp' , 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

Jes
12.02.2008, 14:14
Может тебе нада просто запретить юзеру менять обои ?

HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\ActiveDesktop
> NoChangingWallpaper

или
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\System

> NoDispCPL
> NoDispBackgroundPage

Tapaceuka
12.02.2008, 19:58
напишите плз кто нить исходник, а т я пробовал и умну невыходит чёто((

De-visible
13.02.2008, 08:45
var
Reg: TRegIniFile;
begin
Reg := TRegIniFile.Create('Control Panel');
Reg.WriteString('desktop', 'Wallpaper', 'c:\windows\твой рисунок.bmp');
Reg.WriteString('desktop', 'TileWallpaper', '0');
Reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end; можно так.....
-------------------
или вот:
SystemParametersInfo(
UINT uiAction, // Системный параметр
UINT uiParam, // зависит от параметра и действия
PVOID pvParam, // зависит от параметра и действия
UINT fWinIni // флаг: нужно ли обновить настройки пользователя(файл WinIni)
);
Эта функция позволяет изменять настройки системы...
В данном случае: параметр SPI_SETDESKWALLPAPER Устаналивает обои. pvParam-путь к картинке в формате BMP...
--
uses
windows;
var
s: string;
begin
s := paramStr(1);
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @S[1],
SPIF_UPDATEINIFILE OR SPIF_SENDWININICHANGE);
------------------
можно так....