Delphi32.com - Home!
| Home/News | Downloads | Forums | D32 Magazine | Resources | Info and Facts |  
 
 How do I set the Wallpaper on Windows98/2000 when ActiveDesktop is turned on?


How do I set the Wallpaper on Windows98/2000 when ActiveDesktop is turned on?   

    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.

    Note that the IActiveDesktop interface requires a Shell32.dll version >= 4.7 . The document titled "Get a File Version" demonstrates how to check the file version and uses the shell32.dll as an example.

    Here is an example of using IActiveDesktop to work with the wallpaper. It assumes that you have 3 labels on a form and two buttons with the default names.

    uses ComObj, // For CreateComObject and Initialization/Finalization of COM ShlObj; // For IActiveDesktop

    { The CLASS ID for ActiveDesktop is not defined in ShlObj, while the IID is so we define it here. } const CLSID_ActiveDesktop: TGUID = '{75048700-EF F- D0-9888-006097DEACF9}';

    { Demonstrate getting the Wallpaper } procedure TForm .Button Click(Sender: TObject); var ActiveDesktop: IActiveDesktop; CurrentWallpaper: string; CurrentPattern: string; WallpaperOptions: TWallpaperOpt; tmpBuffer: PWideChar; begin // Create the ActiveDesktop COM Object ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;

    // We now need to allocate some memory to get the current Wallpaper. // However, tmpBuffer is a PWideChar which means 2 bytes make // up one Char. In order to compenstate for the WideChar, we // allocate enough memory for MAX_PATH*2 tmpBuffer := AllocMem(MAX_PATH*2); try ActiveDesktop.GetWallpaper(tmpBuffer, MAX_PATH*2, 0); CurrentWallpaper := tmpBuffer; finally FreeMem(tmpBuffer); end; if CurrentWallpaper <> '' then Label .Caption := 'Current Wallpaper: ' + CurrentWallpaper else Label .Caption := 'No Wallpaper set';

    // Now get the current Wallpaper options. // The second parameter is reserved and must be 0. WallpaperOptions.dwSize := SizeOf(WallpaperOptions); ActiveDesktop.GetWallpaperOptions(WallpaperOptions, 0); case WallpaperOptions.dwStyle of WPSTYLE_CENTER: Label2.Caption := 'Centered'; WPSTYLE_TILE: Label2.Caption := 'Tiled'; WPSTYLE_STRETCH: Label2.Caption := 'Stretched'; WPSTYLE_MAX: Label2.Caption := 'Maxed'; end;

    // Now get the desktop pattern. // The pattern is a string of decimals whose bit pattern // represents a picture. Each decimal represents the on/off state // of the 8 pixels in that row. tmpBuffer := AllocMem(256); try ActiveDesktop.GetPattern(tmpBuffer, 256, 0); CurrentPattern := tmpBuffer; finally FreeMem(tmpBuffer); end; if CurrentPattern <> '' then Label3.Caption := CurrentPattern else Label3.Caption := 'No Pattern set'; end;

    { Demonstrate setting the wallpaper }

    procedure TForm .Button2Click(Sender: TObject); var ActiveDesktop: IActiveDesktop; begin ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop; ActiveDesktop.SetWallpaper('c:\downloads\images\test.bmp', 0); ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE); end; 6/2 /99 2:05:55 PM

     



  << Previous Faq     Complete List     Next Faq >>  



 
 Hits/month  2,500,000+ 
 Downloads
 (Since May 2000)
 7,393,709 
 Total Files  6,023 
 Forum msgs  7,670 
 Articles/FAQs  70+/900+ 
Kylix
Tips n Tricks
FAQs
Knowledge Base
Bug Listings
Articles
Books
Newsgroups
Links
Submissions
Testimonials
Advertising
Contact Us
About Us
Search Amazon:
Top Selling Software at Amazon

| Home/News | Downloads | Forums | Resources | Info and Facts | Testimonials |
  Site Search:
 


Comments/Problems: Webmaster@delphi32.com
Copyright © 1998-2006, Delphi32.com. All rights reserved.
Terms of Use