Problem z zapisaniem tapety

0

Witam :) Mam pewien problem z którym nie umiem sobie poradzić.. :-| Napisałem prościutki programik który zmienia tapety.. Skorzystałem z tego kodu

procedure TForm1.Button1Click(Sender: TObject);

begin

 SystemParametersInfo(SPI_SETDESKWALLPAPER,0, PChar(s), SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);
end;

Wszystko pięknie działa, zmienia się tak jak chciałem, z jednym ale. Jak restartuje system/właczam od nowa to tapety nie ma.. Jest podstawowy kolor pulpitu windows.. :/ Jak zrobić żeby po restarcie systemu tapeta którą wcześniej ustawiłem się wyświetlała? [???]

0

no wiec o ile pamietam informacje o ustawionej tapecie sa trzymane w rejestrze, wiec zapisz tam sciezke do pliku nowej tapety w odpowiednim kluczu

0

hmm tak myślałem - ale jak szukałem tego w rejestrze to zabardzo nie mogłem znaleźć - a jak znalazłem to jakoś to chyba nie było to bo nie działało.. :/ wie ktoś dokładniej jak to moge znaleźć i zrobić ;>

0

HKEY_CURRENT_USER\Control Panel\Desktop + Wallpaper + start brain

0

Dzięki :)

0

Mam jeszcze jeden problem :/ próbowałem napisać procedure która tworzyła by skrót. Wzorowałem się na tym kodzie

uses  ShlObj, ActiveX, ComObj, Registry;

procedure TForm1.Button1Click(Sender: TObject);
var  MyObject:IUnknown;
     MySLink:IShellLink; 
     MyPFile:IPersistFile;  
     FileName:String;
     Directory:String;  
     WFileName:WideString;  
     MyReg:TRegIniFile;
begin
 MyObject:=CreateComObject(CLSID_ShellLink);
 MySLink:=MyObject as IShellLink;  
 MyPFile:=MyObject as IPersistFile;
 FileName:='C:\Windows\NOTEPAD.EXE';  
 with MySLink do 
 begin   
  SetPath(PChar(FileName));
  SetWorkingDirectory(PChar(ExtractFilePath(FileName)));  
 end;

 MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\'+

'CurrentVersion\Explorer');

             // Poniższe dodaje skrót do desktopu
 Directory := MyReg.ReadString('Shell Folders','Desktop','');

 // A to do menu Start
Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
'\Microspace';

  CreateDir(Directory);

 WFileName := Directory+'\Notatnik.lnk';  
 MyPFile.Save(PWChar(WFileName),False);
 MyReg.Free;
end;

ale on nie działa :-| Przeczytałem gdzieś że ten kod nie działa pod xp [glowa] A jak zrobić żeby zadziałał? Ewentualnie jak można to w inny sposób srobić [???]

0

Poniżej masz kod, który tworzy skrót do danego pliku na Pulpicie. Używałem go to stworzenia skrotu
dla gry "Książę i Rchórz" po zakończeniu rozpakowywania z rara całej przygotowanej przeze mnie
wersji gry. Aplikacja jest konsolowa bez okna konsoli (komentarz z GUI) i wybacz mi tutaj braki
formatowania kodu, ale wszystko poza funkcją wykonuje się po kolei, możesz wywalić zbędne
rzeczy z kodu. Na przykład w aplikacji okienkowej zamiast Handle użyj Applicaton.Handle.

program kit_setup;

{$APPTYPE GUI}

uses
Windows, SysUtils, ShlObj, ActiveX, ComObj, Registry;

function IsSlashChar(Path: string): string;
begin
if Path[Length(Path)] <> '\' then
begin
Result := Path + '\'
end
else
begin
Result := Path;
end;
end;

var
V : OSVERSIONINFO;
Desktop : PChar;
SL : IShellLink;
PF : IPersistFile;
Lnk : WideString;
AppPath, ExePath, WorkDir, IconName : string;
wndClass : array[0..50] of Char;
handle : Thandle;
MyReg : TRegIniFile;
begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
Handle := FindWindow(@wndClass[0], nil);
MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');
Desktop := PChar(MyReg.ReadString('Shell Folders', 'Desktop', ''));
MyReg.Free;
GetMem(Desktop, MAX_PATH + 1);
V.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
GetVersionEx(V);
case V.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS:
begin
SHGetSpecialFolderPath(Handle, Desktop, CSIDL_DESKTOPDIRECTORY, True);
end;
VER_PLATFORM_WIN32_NT:
begin
SHGetSpecialFolderPath(Handle, Desktop, CSIDL_COMMON_DESKTOPDIRECTORY, True);
end;
end;
CoInitialize(nil);
OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, SL));
PF := SL as IPersistFile;
AppPath := IsSlashChar(ExtractFilePath(ParamStr(0)));
ExePath := AppPath + 'kit_loader.exe';
OleCheck(SL.SetPath(PChar(ExePath)));
WorkDir := AppPath;
OleCheck(SL.SetWorkingDirectory(PChar(WorkDir)));
IconName := AppPath + 'kit_loader.exe';
OleCheck(SL.SetIconLocation(PChar(IconName), 0));
Lnk := IsSlashChar(Desktop) + 'Książę i Tchórz' + '.lnk';
PF.Save(PWideChar(Lnk), True);
CoUninitialize;
FreeMem(Desktop);
end.

Zressztą sposobów na tworzenie skrótu jest wiele, wystarczy wygooglować by uzyskać przykłady.

0

Dzięki :) Chyba jeszcze sporo lat nauki przedemną żeby takim ludziom jak wy dorównać :P qrcze swoją drogą to Książe i Tchórz to kultowa gra była :) dawno w nią nie grałem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1