Windowsの壁紙を変える

プログラム上からの壁紙設定はIActiveDesktopを利用する。
設定変更後にApplyChanges(AD_APPLY_ALL);を実行しなければいけないことに注意。また、IActiveDesktopはインクルードファイルとしてwininet.hを必要とする。

依存環境:ATL
#include "atlstr.h"

#include "wininet.h"
#include "shlobj.h"


//
//	壁紙の設定
//
//dwTypeは以下の値を設定
//	#define WPSTYLE_CENTER      0
//	#define WPSTYLE_TILE        1
//	#define WPSTYLE_STRETCH     2
//
bool	SetWallpaper(LPCTSTR pszFile,DWORD dwStyle)
{
	HRESULT	hr;
	IActiveDesktop*	pIActiveDesktop;

	pIActiveDesktop = NULL;
	hr = ::CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_INPROC_SERVER,IID_IActiveDesktop,(void**)&pIActiveDesktop);
	if(FAILED(hr) || pIActiveDesktop == NULL)
		return	false;

	hr = pIActiveDesktop->SetWallpaper((CAtlStringW)pszFile,0);
	if(SUCCEEDED(hr))
	{
		WALLPAPEROPT	sInfo;

		sInfo.dwSize = sizeof(WALLPAPEROPT);
		sInfo.dwStyle = dwStyle;
		hr = pIActiveDesktop->SetWallpaperOptions(&sInfo,0);
	}
	if(SUCCEEDED(hr))
		hr = pIActiveDesktop->ApplyChanges(AD_APPLY_ALL);

	pIActiveDesktop->Release();

	return	SUCCEEDED(hr) ? true : false;
}


void	Test(void)
{
	::CoInitialize(NULL);

	SetWallpaper(_T("test.jpg"),WPSTYLE_CENTER);

	::CoUninitialize();
}

プロジェクトファイルをダウンロード


カテゴリー「その他」 のエントリー