C#/ XAML UWPアプリケーションからデスクトップの背景とロック画面を変更する







UWPアプリケーションのかなり興味深い機能は、ロック画面の背景とスクリーンセーバーを問題なく簡単に変更できることです。 奇妙なのは、警告さえなく、マニフェストにアクセス許可を設定する必要がないということです(ただし、マニフェストの機能のユーザーアカウント情報項目のようなものが必要になる場合があります)。



カットシーンの下には、シンプルだが面白いトリックの説明があります。



前述のように、背景の変更には権限は必要ありません。 画像ファイルをアプリケーションに追加し(ninja catファイル-ninjacat.pngを追加)、このスニペットを使用するだけで十分です:



if (UserProfilePersonalizationSettings.IsSupported()) { StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///ninjacat.png")); //          ,       StorageFile localFile = await file.CopyAsync(ApplicationData.Current.LocalFolder,"ninjacat.png", NameCollisionOption.ReplaceExisting); UserProfilePersonalizationSettings settings = UserProfilePersonalizationSettings.Current; bool isSuccess = await settings.TrySetWallpaperImageAsync(localFile); }
      
      





スニペットを使用するために2つの名前空間が追加されました。



 using Windows.System.UserProfile; using Windows.Storage;
      
      





背景を設定するには、 UserProfilePersonalizationSettingsクラスを使用して、プロファイルの背景の変更がサポートされているかどうかを事前に確認します。 イメージを使用するには、アプリケーションディレクトリから別のアクセス可能なフォルダーにコピーする必要がありました(ローカルアプリケーションフォルダーを使用しました)。



ロック画面にイメージをインストールするには、最後の行を次のように置き換える必要があります



  bool isSuccess = await settings.TrySetLockScreenImageAsync(localFile);
      
      





ところで、isSuccessの値は、成功した場合はtrue、失敗した場合はfalseになることは明らかです。



ネットワークから写真をアップロードすることはかなり可能です。 この場合、スニペットは次のように変更されます。



  if (UserProfilePersonalizationSettings.IsSupported()) { StorageFile localFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("cat.png", CreationCollisionOption.ReplaceExisting); BackgroundDownloader downloader = new BackgroundDownloader(); DownloadOperation dl = downloader.CreateDownload(new Uri("http://az648995.vo.msecnd.net/win/2015/07/Windows_Insider_Ninjacat_Unicorn-1024x768-Desktop.png"), localFile); await dl.StartAsync(); UserProfilePersonalizationSettings settings = UserProfilePersonalizationSettings.Current; var isSuccess = await settings.TrySetWallpaperImageAsync(localFile); }
      
      





ただし、この場合、アプリケーションマニフェストでオプションの[インターネット(クライアント)]ボックスをオンにして、名前空間を追加することを忘れないでください。



 using Windows.Networking.BackgroundTransfer;
      
      






All Articles