2013-11-20 4 views
0

C# 서비스를 사용하여 Windows 7 용 배경 화면을 설정하고 싶습니다. 서비스가 콘솔 응용 프로그램으로 실행될 때이 작업이 정상적으로 작동합니다. 그러나 서비스를 설치하고 시작한 후에는 월페이퍼 사이를 전환하지 않습니다. 누구든지 창 안의 벽지를 설정하는 방법을 알고 있습니까 서비스? 당신이 수시로 배경 화면을 전환하고자하는 경우 서비스가 시작되면, ONSTART()가 한 번 실행되는 것을 유의하시기 바랍니다서비스를 사용하여 배경 화면을 변경하는 방법 C#

private String file = @"C://Users//Alvin//Pictures//onepiece.jpg"; 

/// <summary> 
/// Set things in motion so your service can do its work. 
/// </summary> 
protected override void OnStart(string[] args) 
{ 
    SetWallpaper(file, 0); 
} 

private void SetWallpaper(string WallpaperLocation, int WallpaperStyle) 
{ 
    try 
    { 
     // Sets the actual wallpaper 
     SystemParametersInfo(20, 0, "@" + WallpaperLocation, 0x01 | 0x02); 
     // Set the wallpaper style to streched (can be changed to tile, center, maintain aspect ratio, etc. 
     RegistryKey rkWallPaper = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true); 
     // Sets the wallpaper style 

     switch (walpaperStyle) 
     { 
      case 0: 
       rkWallPaper.SetValue(@"WallpaperStyle", "0"); 
       rkWallPaper.SetValue(@"TileWallpaper", "1"); 
       break; 
      case 1: 
       rkWallPaper.SetValue(@"WallpaperStyle", "0"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
      case 2: 
       rkWallPaper.SetValue(@"WallpaperStyle", "2"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
      case 3: // (Windows 7 and later) 
       rkWallPaper.SetValue(@"WallpaperStyle", "6"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
      case 4: // (Windows 7 and later) 
       rkWallPaper.SetValue(@"WallpaperStyle", "10"); 
       rkWallPaper.SetValue(@"TileWallpaper", "0"); 
       break; 
     } 

     rkWallPaper.Close(); 
     cetakService("sukses set walpaper"); 
    } 
    catch (Exception e) 
    { 
     cetakService("Error "+e.Message.ToString()); 
    } 
} 
+0

서비스가 일시적으로 관리자 계정으로 실행되는 사용자를 변경하여 코드가 아닌 권한에 문제가 없는지 확인해 봤습니까? – JMK

+0

로컬 시스템 계정으로 서비스를 변경했지만 작동하지 않습니다. – user3012452

+0

Windows를 사용하는 실제 계정은 어떻습니까? – JMK

답변

1

:

여기 내 코드입니다. 나는 당신이 SetWallpaper를 통해 벽지를 어떻게 바꾸고 있는지 보지 못한다. 그것은 실제로 한 번 실행하고 배경 화면을 설정합니다. 실행될 다양한 케이스에 대한 배경 화면을 변경하지 않고 유지하는 로직은 구현되지 않습니다. 이 코드는 처음 서비스를 시작할 때 배경 무늬를 변경해야합니다. 원하는 경우 서비스에 레지스트리 값에 액세스 할 수있는 충분한 권한이 있는지 확인하십시오.

+0

답변 해 주셔서 감사합니다 : 코드가 작동하는지 확인하기 위해 metad onStart에 setWallpaper를 넣었지만 서비스를 시작한 시점에 벽지를 변경하지 않습니다. 실제로 타이머를 사용하여 변경합니다. 매분마다 벽지, – user3012452

+0

좋아. 여기에 문제가 있습니다. 로컬 시스템에서 서비스를 실행 중이고 레지스트리에서 HKEY_CURRENTUSER에 액세스하려고합니다. 대신 HKEY_USERS에 액세스 해보십시오. 그것은 당신에게 당신의 기계 사용자의 SID 목록을 줄 것이다. 각기 다른 제어판과 배경 화면 설정이 있습니다. 현재 사용자의 SID를 찾고 거기에서 배경 화면을 변경하십시오. –

+0

감사합니다. Mr.Wasiq – user3012452

관련 문제