Windowsフォーカス画像の抽出(Spotlight)

5713 ワード

前言
Windowsフォーカス(Windows Spotlight)は、Windows 10に追加されたロック壁紙機能で、自動的にダウンロードされ、ランダムにロック壁紙が交換されます.Windowsフォーカスの壁紙は往々にして非常に精巧で衝撃的で、コレクションに値する.しかし、これらの壁紙はすべてあなたのパソコンのキャッシュフォルダに置いてあり、接尾辞名はありません.プレビューするには「.jpg」を追加する必要があります.次の図に示します.
C:Usersあなたのユーザー名AppDataLocalPackagesMicrosoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
パス:
C:Usersあなたのユーザー名AppDataLocalPackagesMicrosoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets
Windowsフォーカスの壁紙が好きな場合は、すべての壁紙に接尾辞を付ける必要があります.効率が低すぎます.Windowsに搭載されているPowerShell機能を利用して、これらの画像を自動的に接尾辞を付けて「画像」フォルダに保存することができます.
Windowsフォーカス画像のみ保存
コードは次のとおりです.
#                      
add-type -AssemblyName System.Drawing  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight" -ItemType directory -Force;  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets" -ItemType directory -Force;  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal" -ItemType directory -Force;  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight\Vertical" -ItemType directory -Force;  
 
#                     
foreach($file in (Get-Item "$($env:LOCALAPPDATA)\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\*"))  
{  
    if ((Get-Item $file).length -lt 100kb) { continue }  
    Copy-Item $file.FullName "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\$($file.Name).jpg";  
}  
  
foreach($newfile in (Get-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\*"))  
{  
    $image = New-Object -comObject WIA.ImageFile;  
    $image.LoadFile($newfile.FullName);  
    if($image.Width.ToString() -eq "1920"){ Move-Item $newfile.FullName "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal" -Force; }  
    elseif($image.Width.ToString() -eq "1080"){ Move-Item $newfile.FullName "$($env:USERPROFILE)\Pictures\Spotlight\Vertical" -Force; }  
}  
 
 

文書ドキュメントを新規作成し、上記のコードを貼り付けて.ps1という接尾辞を保存し、GetWallPaperFromSpotlight.ps1と名付け、「PowerShellで実行」を右クリックすると、すべてのフォーカス画像が自分のユーザー画像フォルダの下のSpotlightフォルダに保存されていることがわかります.
Windowsデスクトップ壁紙として保存および設定
コードは次のとおりです.
#                      
add-type -AssemblyName System.Drawing  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight" -ItemType directory -Force;  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets" -ItemType directory -Force;  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal" -ItemType directory -Force;  
New-Item "$($env:USERPROFILE)\Pictures\Spotlight\Vertical" -ItemType directory -Force;  
 
#                     
foreach($file in (Get-Item "$($env:LOCALAPPDATA)\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets\*"))  
{  
    if ((Get-Item $file).length -lt 100kb) { continue }  
    Copy-Item $file.FullName "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\$($file.Name).jpg";  
}  
  
foreach($newfile in (Get-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\*"))  
{  
    $image = New-Object -comObject WIA.ImageFile;  
    $image.LoadFile($newfile.FullName);  
    if($image.Width.ToString() -eq "1920"){ Move-Item $newfile.FullName "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal" -Force; }  
    elseif($image.Width.ToString() -eq "1080"){ Move-Item $newfile.FullName "$($env:USERPROFILE)\Pictures\Spotlight\Vertical" -Force; }  
}  
 
#         
function Set-Wallpaper  
{  
    param(  
        [Parameter(Mandatory=$true)]  
        $Path,  
   
        [ValidateSet('Center', 'Stretch')]  
        $Style = 'Center'  
    )  
   
    Add-Type @"  
using System;  
using System.Runtime.InteropServices;  
using Microsoft.Win32;  
namespace Wallpaper  
{  
public enum Style : int  
{  
Center, Stretch  
}  
public class Setter {  
public const int SetDesktopWallpaper = 20;  
public const int UpdateIniFile = 0x01;  
public const int SendWinIniChange = 0x02;  
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]  
private static extern int SystemParametersInfo (int uAction, int uParam, string lpvParam, int fuWinIni);  
public static void SetWallpaper ( string path, Wallpaper.Style style ) {  
SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );  
RegistryKey key = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", true);  
switch( style )  
{  
case Style.Stretch :  
key.SetValue(@"WallpaperStyle", "2") ;  
key.SetValue(@"TileWallpaper", "0") ;  
break;  
case Style.Center :  
key.SetValue(@"WallpaperStyle", "1") ;  
key.SetValue(@"TileWallpaper", "0") ;  
break;  
}  
key.Close();  
}  
}  
}  
"@  
   
    [Wallpaper.Setter]::SetWallpaper( $Path, $Style )  
}  
   
  
$filePath = "$($env:USERPROFILE)\Pictures\Spotlight\Horizontal\*"  
$file = Get-Item -Path $filePath | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1  
Set-Wallpaper -Path $file.FullName    
# echo $file.FullName  
  
Remove-Item "$($env:USERPROFILE)\Pictures\Spotlight\CopyAssets\*";  
#pause  

同様に、文書ドキュメントを新規作成し、上記のコードを貼り付け、保存接尾辞を.ps1、名前をSetWallPaperFromSpotlight.ps1とし、右クリックで「PowerShellで実行」すると、デスクトップの背景がWindowsフォーカス画像に変換されていることがわかります.
Windowsデスクトップ壁紙として毎日自動的に抽出および設定
Windows独自のタスクプランプログラムと、上記のPowerShellスクリプトで実現できます.Windowsのフォーカス画像があまり好きではないので、壁紙を自動的に交換したくないです.だからこの部分は実現しようとしなかった.興味のある学生はこの文章を参考にすることができる.
参照先:http://blog.csdn.net/anymake_ren/article/details/51125609