背景(壁紙)を変更するWin32APIはIDesktopWallpaperのSetWallpaperがおすすめ
背景設定アプリで欠かせない機能と言えば、当然ですが背景を変更する機能です。
今回は.NET 5/C#/WPFでアプリを作成しており、調べてみるとWin32APIのSystemParametersInfoを使用して背景を変更させる方法が多数見つかります。
しかしどうやらこのAPIでは、モニタごとに背景を設定することはできないようです。
もう少し調べてみると、モニタごとに背景を設定できるWin32APIとして、IDesktopWallpaper::SetWallpaper methodがWindows 8から使えるようになったようです。
Windows 7はサポートが終了していますので、現在作成中のアプリの動作対象外としても問題ないでしょう。
このAPIを使うことにしました。
このIDesktopWallpaper SetWallpaperはWin32APIのため、C#から使うには面倒です。
誰かがまとめてくれていないかと思い更に探したところ、Microsoftのフォーラムに投稿がありましたので、こちらを参考にさせてもらうことにしました。
ただしIDesktopWallpaperのデメリットとして、このAPIを使用して背景を設定すると、背景を設定後にWindows側で画像の圧縮を行うので画質が悪くなるという記事も見つかりましたので、今後調べていきたいと思います。
参考:IDesktopWallpaper::SetWallpaper method
How do I set the wallpaper / background image per Desktop / Monitor?
Win 10編: デスクトップ背景のJPEG画質を調整する
コメント
[…] 開発中はメモ代わりにブログ記事を投稿しようと考えていましたが、なかなか面倒で投稿できず、5回目の投稿にして公開しましたの記事となりました。1個前の投稿が「背景(壁紙)を変更するWin32APIはIDesktopWallpaperのSetWallpaperがおすすめ」という基本の基本でしたね… […]