Programming/Windows API
SystemParameterInfo API함수는 제어판이나 기타 다른방식등을 통해 설정가능한 Windows OS의 여러가지 환경을 제어할 수 있는 함수입니다.

1. 배경화면 변경

Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
▶VB.NET 선언

Declare Auto Function SystemParametersInfo Lib "user32.dll" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
▶VB.NET 선언(auto의 사용 : Alias 구문을 생략가능)

Private Const SPI_SETDESKWALLPAPER As Integer = 20
Private Const SPIF_UPDATEINIFILE As Integer = 1
Private Const SPIF_SENDWININICHANGE As Integer = 2

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\Documents and Settings\Administrator\My Documents\My Pictures\MANHATTANXP.bmp", SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
▶C# 선언

private const int SPI_SETDESKWALLPAPER = 20;
private const int SPIF_UPDATEINIFILE = 1;
private const int SPIF_SENDWININICHANGE = 2;

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @"C:\Documents and Settings\Administrator\My Documents\My Pictures\MANHATTANXP.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

▶C# 호출

2. 키보드 설정값 가져오기

Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByRef lpvParam As Integer, ByVal fuWinIni As Integer) As Integer
▶VB.NET 선언

Private Const SPI_GETKEYBOARDSPEED = 10
Private Const SPI_GETKEYBOARDDELAY = 22

Dim idelay As Integer
Dim ispeed As Integer

SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, idelay, 0) SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, ispeed, 0)

idelay
ispeed

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SystemParametersInfo(int uAction, int uParam, ref int lpvParam, int fuWinIni);
▶C# 선언

private const int SPI_GETKEYBOARDSPEED = 10;
private const int SPI_GETKEYBOARDDELAY = 22;

int idelay = 0;
int ispeed = 0;

SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, ref idelay, 0);
SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, ref ispeed, 0);

idelay
ispeed

▶C# 호출

SystemParameterInfo함수에서 첫번째 인수는 설정또는 조회하고나 하는 시스템 설정환경의 Type을 건네주며 두번째와 세번째인수에 인수에서 정한 시스템 환경의 종류에 따라 실제 그에 해당하는 값을 건네줍니다. 그리고 세번째 인수로 사용자의 프로파일저장및 바로적용여부를 지정합니다.

첫번째 인수는 첫번째 인수에서 정한 Type에 따라 정확히 해당 Type의 어떤 부분을 설정할 것인지에 대한 인수로서 정수형태의 데이터형식을 건네주게 되는데 세번째 인수는 설정하고자 하는 값에 따라 문자열형(String)이 될 수 도 있고 정수형(Integer)형이 될 수 도 있는등 전달Data형과 전달방식이 달라질 수 있으니 참고하시기 바랍니다.

위 예제는 SPI_SETDESKWALLPAPER(20) 인수를 써서 윈도우의 배경화면을 바꾸기 위한 것과 SPI_GETKEYBOARDSPEED(10) / SPI_GETKEYBOARDDELAY(22) 인수를 통한 Keyboard의 Delay및 속도설정값을 가져옵니다.

배경화면 설정 부분에서 Code를 실제 적용하기 위해서는 Image가 Bmp형식이여야 합니다.(확장자와는 무관하게 저장형식 자체가 Bmp여야하며 Vistal 또는 그 이상의 계열에서는 다른 형식의 Image도 인식이 가능합니다.)

만일 jpg나 기타 다른 형식의 이미지를 Bmp로 바꾸어 Test하고자 하신다면 그림판으로 해당 Image를 불러들여 Bmp형식으로 다시 저장하시거나 아래 코드를 참고하여 변환하는 Program을 직접 만드셔도 됩니다. 

Image.FromFile("원본이미지경로").Save("저장경로", System.Drawing.Imaging.ImageFormat.Bmp)
▶VB.NET

Image.FromFile(@"원본이미지경로").Save(@"저장경로", System.Drawing.Imaging.ImageFormat.Bmp);
▶C#

해당 경로에 지정한 Image를 저장경로의 위치에 Bmp형식으로 저장합니다.

SPI_SETDESKWALLPAPER에서 SET은 대부분 설정을 의미하고 반면 GET으로 시작하는것은 설정이 아닌 조회를 의미합니다. SystemParameterInfo함수에서는 이러한 인수에 따라 설정하거나 조회할 수 있는 환경설정부분이 대략 100여가지 정도 됩니다.

나머지 설정이나 조회부분은 MSDN을 참고하여 주십시오.
0 0