|
壁紙の情報を取得する ※ 協力:ヴォーガ様 |
| ダウンロード : 壁紙表示サンプル(2005/08/14) |
|
#include <wininet.h> #include <shlobj.h> |
|
#include <afxdtctl.h> // MFC の Internet Explorer 4 コモン コントロール サポート |
|
#include <afxwin.h> // MFC のコアおよび標準コンポーネント #include <afxext.h> // MFC の拡張部分 #include <wininet.h> // ← ここに追加しました。 #include <afxdtctl.h> // MFC の Internet Explorer 4 コモン コントロール サポート |
|
// --------------------------------------------------------------------- // アクティブデスクトップ環境か調べる // --------------------------------------------------------------------- BOOL CFooDlg::IsActiveDesktop() { BOOL bActiveDesktop = FALSE; // COMPONENTSOPT 構造体のメンバをゼロで埋める COMPONENTSOPT copt; ZeroMemory(&copt, sizeof(copt)); copt.dwSize = sizeof(COMPONENTSOPT); // IActiveDesktop オブジェクトのインスタンスを作成 CoInitialize (NULL); IActiveDesktop* pActiveDesktop; if SUCCEEDED(CoCreateInstance( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pActiveDesktop )) { // アクティブデスクトップが設定されているか if SUCCEEDED(pActiveDesktop->GetDesktopItemOptions(&copt, 0)) bActiveDesktop = copt.fActiveDesktop ? TRUE : FALSE; // インスタンスを開放 pActiveDesktop->Release(); } CoUninitialize(); return bActiveDesktop; } |
|
// --------------------------------------------------------------------- // アクティブデスクトップ環境の壁紙情報を取得する // --------------------------------------------------------------------- BOOL CFooDlg::GetActiveDesktopWallpaper( CString& r_strPath, // 壁紙のパス DWORD& r_dwStyle // 壁紙の設定状態 // WPSTYLE_CENTER : 中央に表示 // WPSTYLE_TILE : タイル表示 // WPSTYLE_STRETCH : 拡大して表示 ) { BOOL bSuccess = FALSE; // COMPONENTSOPT 構造体のメンバを埋める COMPONENTSOPT copt; ZeroMemory(&copt, sizeof(copt)); copt.dwSize = sizeof(COMPONENTSOPT); // IActiveDesktop オブジェクトのインスタンスを作成 CoInitialize (NULL); IActiveDesktop* pActiveDesktop; if SUCCEEDED(CoCreateInstance( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pActiveDesktop )) { // アクティブデスクトップが設定されているか if SUCCEEDED(pActiveDesktop->GetDesktopItemOptions(&copt, 0)) { // アクティブデスクトップなら if (copt.fActiveDesktop) { bSuccess = TRUE; // パスを取得する WCHAR wszPath[MAX_PATH + 1]; if SUCCEEDED(pActiveDesktop->GetWallpaper(wszPath, MAX_PATH, 0)) { // 文字コードを変換する ::WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)wszPath, int(wcslen(wszPath) + 1), r_strPath.GetBuffer(MAX_PATH + 1), MAX_PATH, NULL, NULL ); r_strPath.ReleaseBuffer(); } // タイル状態か確認する WALLPAPEROPT wpopt; wpopt.dwSize = sizeof(WALLPAPEROPT); if SUCCEEDED(pActiveDesktop->GetWallpaperOptions(&wpopt, 0)) r_dwStyle = wpopt.dwStyle; } } // 開放 pActiveDesktop->Release(); } CoUninitialize(); return bSuccess; } |
|
// --------------------------------------------------------------------- // 通常デスクトップ環境の壁紙を取得する // --------------------------------------------------------------------- BOOL CFooDlg::GetDesktopWallpaper( CString& r_strPath, // 壁紙のパス DWORD& r_dwStyle // 壁紙の設定状態 // WPSTYLE_CENTER : 中央に表示 // WPSTYLE_TILE : タイル表示 // WPSTYLE_STRETCH : 拡大して表示 ) { BOOL bSuccess = FALSE; // 壁紙の設定情報を直接レジストリから読み出す CRegKey reg; if (reg.Open( HKEY_CURRENT_USER, _T("Control Panel\\Desktop"), KEY_READ ) == ERROR_SUCCESS) { // 壁紙のパス ULONG ulLen = MAX_PATH; reg.QueryStringValue( _T("Wallpaper"), r_strPath.GetBuffer(MAX_PATH + 1), &ulLen ); r_strPath.ReleaseBuffer(); // タイル表示か? DWORD dwStyle; reg.QueryDWORDValue(_T("TileWallpaper"), dwStyle); if (dwStyle == _T('1')) { r_dwStyle = WPSTYLE_TILE; } else { // 拡大して表示か? reg.QueryDWORDValue(_T("WallpaperStyle"), dwStyle); r_dwStyle = (dwStyle == _T('2')) ? WPSTYLE_STRETCH : WPSTYLE_CENTER; } reg.Close(); } return bSuccess; } |