Application/C# (WinForm)

[C# WinForm] 배경 화면 지정하기 (WallPaper)

devsalix 2023. 1. 20. 15:22
728x90

C#에서 배경 화면 지정을 하고 싶다면

 

외부 dll인 user32.dl를 참조하여 SystemParametersInfo함수를 선언 후 사용 하여야 합니다

 

기본적인 사용법은

 

using System.Runtime.InteropServices;
using Microsoft.Win32;

public class _MainClass
{
	[DllImport("user32.dll", CharSet = CharSet.Auto)]
	static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);

	private const int SPI_SETDESKWALLPAPER = 20;
	private const int SPIF_UPDATEINIFILE = 0x01;
	private const int SPIF_SENDWININICHANGE = 0x02;
		
	public void SetWindowBackgroundImage(string ImgPath)
	{
		if (File.Exists(ImgPath) == false) return;

		RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
		key.SetValue(@"WallpaperStyle", "1");
		key.SetValue(@"TileWallpaper", "0");
			
		SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ImgPath, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
	}
}

 

위와 같이 코딩 후 사용이 가능합니다

 

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
key.SetValue(@"WallpaperStyle", "1");
key.SetValue(@"TileWallpaper", "0");

 

위 함수의 경우는 

 

HKEY_CURRENT_USER\Control Panel\Desktop 하위 레지스트리 쓰기 권한을 획득 후

 

WallpaperStyle의 값과 TileWallpaper의 값을 수정하는 구문으로

 

TileWallpaper의 값이 1일 경우는 WallpaperStyle의 값을 참조하지 않고

 

그냥 바둑판식 스타일이 지정되며

 

TileWallpaper의 값이 0일 경우WallpaperStyle의 값에 따라 배경화면 스타일을 지정하게 됩니다

 

0의 경우 가운데,  1의 경우 바둑판식, 2의 경우 늘이기, 3의 경우 맞춤, 4의 경우 채움

 

마지막으로 5의 경우 스팬 방식으로 지정이 됩니다

 

그 후 

 

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, ImgPath, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

 

위의 함수의 사용으로 배경 화면을 지정하면 됩니다

 

SystemParametersInfo  함수는 다양한 기능을 제공하는데

 

첫 번째 인자인 SPI_SETDESKWALLPAPER 값으로 배경화면을 지정하거나 삭제할 수 있습니다

 

3번째 인자는 배경 화면 이미지의 경로를 명시하면 되고

 

4번째 인자의

 

SPIF_UPDATEINIFILE 값은 새로운 설정을 업데이트하겠다는 뜻이고

 

SPIF_SENDWININICHANGE 값은 변경 후 윈도우에게 WM_SETTINGCHANGE 메시지를 주겠다는 의미입니다

 

이렇게 하면 윈도우의 배경화면이 설정한 이미지로 변경이 완료됩니다

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90