Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Чтобы рисунок на рабочий стол сам ставился (https://forum.antichat.xyz/showthread.php?t=61565)

Tapaceuka 11.02.2008 22:48

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

z01b 11.02.2008 23:06

Цитата:

Сообщение от desTiny
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

Цитата:

Сообщение от Tapaceuka
Надо чтоыб при запуске проги копировался рисунок куда нить далеко далеко и както надо дабывить в реестр тобы этот фон при загрузке делался сам

А вот то что просил на 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\Microsoft\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);

------------------
можно так....


Время: 18:24