アクティブデスクトップが有効かどうかを知るには?


もす  2007-05-26 21:38:14  No: 65199

はじめまして。
いま壁紙を変更するプログラムを作っているのですが、
・アクティブデスクトップが有効か無効かをチェックする
・有効であればビットマップ以外でも壁紙に指定可能とし、無効ならばビットマップのみ指定可能とする
というような処理を行いたいと思っています。

そこで以下のIsEnableActiveDesktop関数を作成しチェックを行ってみたのですが、
アクティブデスクトップが有効で画面のプロパティではJPEGなどのビットマップ以外の画像を指定できる状況でも
IsEnableActiveDesktop関数はfalseを返し、デスクトップ上にWEB項目?を表示させている状態だとtrueを返しました。

単純にアクティブデスクトップが有効でJPEGなどを壁紙に設定できる状態かどうかを取得するにはどうしたらいいのでしょうか?

/*
 *  アクティブデスクトップが有効かどうかを調べる
 *  戻り値:
 *    true  有効
 *    false  無効もしくはエラー
 */
bool IsEnableActiveDesktop()
{
    LPACTIVEDESKTOP psl;
  COMPONENTSOPT com;

    if( CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void **)&psl) == S_OK )
    {
        ZeroMemory(&com, sizeof(com));
        com.dwSize = sizeof(COMPONENTSOPT);
        if( psl->GetDesktopItemOptions(&com, 0) == S_OK )
        {
            psl->Release();

            if( com.fActiveDesktop )
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
    return false;
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加