AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wallpaper ermitteln/setzen

Ein Thema von Daniel B · begonnen am 31. Jan 2003 · letzter Beitrag vom 4. Mai 2007
Antwort Antwort
Daniel B
(Gast)

n/a Beiträge
 
#1

Wallpaper ermitteln/setzen

  Alt 31. Jan 2003, 00:04
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sWallPaperBMPPath: string;
begin
  sWallPaperBMPPath := 'C:\[WinDIR]\wall.bmp';
  if not SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Pointer(sWallPaperBMPPath),
    SPIF_SENDWININICHANGE) then
    ShowMessage('Succesful.')
  else
    ShowMessage('Failed!');
end;


// 3. Set the wallpaper for the Active Desktop.
{
  You may have noticed that using SystemParametersInfo to change the wallpaper
  when ActiveDesktop is turned on doesn't work. The reason is because you need
  to use the IActiveDesktop COM interface. Using SystemParametersInfo still works,
  but it doesn't update the wallpaper.
  Requires Internet Explorer 4.0 or later).
}


uses
  ShlObj, ComObj;

function ChangeWallpaper(aFile: String): Boolean;
const
  CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
  hObj: IUnknown;
  ADesktop: IActiveDesktop;
  str: string;
  wstr: PWideChar;
begin
  hObj := CreateComObject(CLSID_ActiveDesktop);
  ADesktop := hObj as IActiveDesktop;
  wstr := AllocMem(MAX_PATH);
  try
    StringToWideChar(aFile, wstr, MAX_PATH);
    ADesktop.SetWallpaper(wstr, 0);
    ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  finally
    FreeMem(wstr);
  end;
end;
Post von alexander!
Beitrag aus dem SwissDelphiCenter!

Grüsse, Daniel
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wallpaper ermitteln/setzen

  Alt 30. Sep 2005, 17:07
alexander hat hier einen Sourcen von Duffy gepostet:
Delphi-Quellcode:
//-----------------------------------------------------------------------//

//#######################################################################//
//## Procedure ChangeWallpaper: ##//
//#######################################################################//
//## Datum: Änderung: ##//
//## ====== ========= ##//
//## 10.07.1998 Initial Release ##//
//#######################################################################//
procedure ChangeWallpaper(BmpName: string; Tile: Boolean);
var
  Registry: TRegIniFile;
begin
  Registry := TRegIniFile.Create('Control Panel');
  try
    Registry.WriteString('Desktop', 'Wallpaper', BmpName);
    if Tile then
    begin
      Registry.WriteString('Desktop', 'TileWallpaper', '1');
    end
    else
    begin
      Registry.WriteString ('Desktop', 'TileWallpaper', '0');
    end;
  finally
    Registry.Free;
  end;
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end;
Eine kleine Änderung von glkgereon und Khabarakh:
Delphi-Quellcode:
procedure ChangeWallpaper(BmpName: string; Tile: Boolean);
var
  Registry: TRegIniFile;
begin
  Registry := TRegIniFile.Create('Control Panel');
  try
    Registry.WriteString('Desktop', 'Wallpaper', BmpName);
    Registry.WriteString('Desktop', 'TileWallpaper', Chr(Ord('0') + Ord(Tile))); //entsprechende Zeile
  finally
    Registry.Free;
  end;
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end;
Noch eine Erweiterung von mir. Der Unterschied besteht darin, dass nicht nur Tiles verwendet werden können, sondern auch "Stretch" und "Center" (getestet unter WinXP):
Delphi-Quellcode:
// Parameter "Mode": 0 für Zentriert, 1 für Tiles (Nebeneinander) und 2 für Stretch (Strecken) (Zahlen jeweils als String)
procedure ChangeWallpaper(FileName: string; Mode: string);
var
  Registry: TRegIniFile;
begin
  Registry := TRegIniFile.Create('Control Panel');
  try
    Registry.WriteString('Desktop', 'Wallpaper', FileName);
    Registry.WriteString('Desktop', 'WallpaperStyle', Mode);
  finally
    Registry.Free;
  end;
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE);
end;
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wallpaper ermitteln/setzen

  Alt 4. Mai 2007, 22:20
turboPASCAL hat noch folgende Ergänzung, zum Ermitteln des Wallpapers:

SPI_GETDESKWALLPAPER sollte eigentlich in der Windows.pas von Delphi definiert sein, ist es aber
leider nicht (jedenfalls bei Delphi 5/6)

Delphi-Quellcode:
function GetWallpaperBitmap: String;
const
  SPI_GETDESKWALLPAPER = $0073;
var
  wpFName: array [0..MAX_PATH] of Char;
begin
  if SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, @wpFName, 0)
    then Result := String(wpFName)
    else Result := '';
end;
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz