Skip to content

Instantly share code, notes, and snippets.

@IJMacD
Forked from MichaelPote/himawari.ps1
Last active March 9, 2021 23:20
Show Gist options
  • Save IJMacD/c4cd803ab5b09eaa53dd to your computer and use it in GitHub Desktop.
Save IJMacD/c4cd803ab5b09eaa53dd to your computer and use it in GitHub Desktop.
Windows Powershell Script to download the latest image from the DSCOVR satellite then set as the desktop background.
#
# DSCOVR:EPIC Downloader
#
#
#
# This script will scrape the latest image from the DSCOVR satellite, recombining the tiled image,
# converting it to a JPG which is saved in My Pictures\DSCOVR\ and then set as the desktop background.
#
# http://epic.gsfc.nasa.gov/
#
#
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12';
function getImageList(){
$url = "https://epic.gsfc.nasa.gov/api/natural"
try {
Invoke-WebRequest -Uri $url | ConvertFrom-Json
} catch {
Write-Error "Couldn't Download Image List"
Exit
}
}
function getLatestImage(){
$j = getImageList($now)
$len = $j.length
if($len -lt 1) {
Write-Error "No Images found"
Exit
}
$j[$len - 1].image
}
#Create the folder My Pictures\DSCOVR\ if it doesnt exist
$outpath = [Environment]::GetFolderPath("MyPictures") + "\DSCOVR\"
if(!(Test-Path -Path $outpath ))
{
[void](New-Item -ItemType directory -Path $outpath)
}
#The filename that will be saved:
#Uncomment this to have the files accumulate in the directory:
#$outfile = "$year$month$day"+"_" + $time + ".jpg"
#Use this to have the script just store the latest file only:
$outfile = "latest.jpg"
$img = getLatestImage
$url = "http://epic.gsfc.nasa.gov/epic-archive/jpg/$img.jpg"
try {
Invoke-WebRequest $url -OutFile ($outpath + $outfile)
}
catch {
Write-Error "Couldn't Download Image"
Exit
}
<#
Different settings for the wallpaper:
Tile :
key.SetValue(@"WallpaperStyle", "0") ;
key.SetValue(@"TileWallpaper", "1") ;
break;
Center :
key.SetValue(@"WallpaperStyle", "0") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
Stretch :
key.SetValue(@"WallpaperStyle", "2") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
Fill :
key.SetValue(@"WallpaperStyle", "10") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
Fit :
key.SetValue(@"WallpaperStyle", "6") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
#>
Write-Output "Setting Wallpaper..."
Set-ItemProperty -path "HKCU:Control Panel\Desktop" -name Wallpaper -value ($outpath + $outfile)
Set-ItemProperty -path "HKCU:Control Panel\Desktop" -name WallpaperStyle -value 6
Set-ItemProperty -path "HKCU:Control Panel\Desktop" -name TileWallpaper -value 0
Set-ItemProperty 'HKCU:\Control Panel\Colors' -name Background -Value "0 0 0"
#rundll32.exe user32.dll, UpdatePerUserSystemParameters
$setwallpapersource = @"
using System.Runtime.InteropServices;
public class wallpaper
{
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 )
{
SystemParametersInfo( SetDesktopWallpaper, 0, path, UpdateIniFile | SendWinIniChange );
}
}
"@
Add-Type -TypeDefinition $setwallpapersource
[wallpaper]::SetWallpaper(($outpath + $outfile))
Write-Output "Done"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment