Win32 API 日本語リファレンス
ホームUI.Shell › IHomeGroup

IHomeGroup

COM
IID7a3bd1d9-35a9-4fb3-a467-f48cac35e2d0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

コンピューターのホームグループへの参加状況を判定し、共有ウィザードを表示するためのメソッドを公開します。

解説(Remarks)

実装するタイミング

IHomeGroup の独自実装はサポートされていません。クライアントアプリケーションは Provsvc.dll に用意された実装を使用します。

使用するタイミング

ローカルコンピューターのホームグループへの参加状況を判定する必要がある場合、つまりローカルコンピューターがホームグループのメンバーであるかどうかを確認する場合に IHomeGroup を使用します。

IHomeGroup のインスタンスを作成するには、CoCreateInstance を呼び出し、CLSID として CLSID_HomeGroup を指定します。CLSID_HomeGroup は Shobjidl.h および Shobjidl.idl で定義されています。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT IsMember(BOOL* member)

ローカルコンピューターがホームグループのメンバーであるかどうかを判定します。

memberBOOL*outこのメソッドが正常に返ると、ローカルコンピューターがホームグループのメンバーである場合は TRUE を、そうでない場合は FALSE を受け取ります。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

次のコードスニペットは、IHomeGroup のインスタンスを作成し、IHomeGroup::IsMember を呼び出す方法を示しています。

#include "shobjidl.h"
#include "atlbase.h"   // For COM smart pointers
                    
CComPtr<IHomeGroup> spHomeGroup;
HRESULT hr = S_OK;
BOOL fIsHGMember = FALSE;

// Initialize the COM subsystem.
hr = CoInitialize(NULL);
if (FAILED(hr)) return hr;

// Create an instance of IHomeGroup.
hr = CoCreateInstance(CLSID_HomeGroup, 
                      NULL, 
                      CLSCTX_INPROC_SERVER, 
                      IID_PPV_ARGS(&spHomeGroup));

if (FAILED(hr)) return hr;

// fIsHGMember receives the value TRUE if the local computer is a member of a 
// HomeGroup, or FALSE if the computer is not a HomeGroup member.
hr = spHomeGroup->IsMember(&fIsHGMember);
vtbl 4 HRESULT ShowSharingWizard(HWND owner, HOMEGROUPSHARINGCHOICES* sharingchoices)

ユーザーがホームグループを作成できるウィザードを表示し、ユーザーがウィザードを通じて選択した共有オプションを取得します。

ownerHWNDin通知に使用される、ウィザードのオーナーウィンドウのハンドルです。この値は NULL にできます。
sharingchoicesHOMEGROUPSHARINGCHOICES*out

値へのポインターです。このメソッドが正常に返ると、ウィザードを通じてホームグループと共有するために選択されたライブラリおよびデバイスを示す次の値のうち 1 つ以上を受け取ります。

HGSC_NONE (0x00000000)

0x00000000。ホームグループのオプションはいずれも選択されませんでした。

HGSC_MUSICLIBRARY (0x00000001)

0x00000001。ミュージックライブラリがホームグループと共有するために選択されました。

HGSC_PICTURESLIBRARY (0x00000002)

0x00000002。ピクチャライブラリがホームグループと共有するために選択されました。

HGSC_VIDEOSLIBRARY (0x00000004)

0x00000004。ビデオライブラリがホームグループと共有するために選択されました。

HGSC_DOCUMENTSLIBRARY (0x00000008)

0x00000008。ドキュメントライブラリがホームグループと共有するために選択されました。

HGSC_PRINTERS (0x00000010)

0x00000010。インストール済みのプリンターデバイスがホームグループと共有するために選択されました。

戻り値

型: HRESULT

成功した場合は S_OK を返し、それ以外の場合は次を含む標準的なエラー値を返します。

戻り値コード 説明
ERROR_CANCELLED
ユーザーがウィザードをキャンセルしました。このエラーコードを取り出すには HRESULT_FROM_WIN32 を使用します。
E_UNEXPECTED
コンピューターがホームグループに参加していないか、ネットワークまたはホームグループが共有を許可する状態にありません(ネットワークに接続されていない、または別の共有操作が進行中であるなど)。
E_NOINTERFACE
このメソッドがマルチスレッドアパートメント(MTA)スレッドから起動されました。
E_INVALIDARG
sharingchoices パラメーターが NULL です。

解説(Remarks)

このメソッドはシングルスレッドアパートメント(STA)スレッドから呼び出す必要があります。

次のコードは ShowSharingWizard の使用例を示しています。

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr))
{
    IHomeGroup *phg;
    
    hr = CoCreateInstance(CLSID_HomeGroup, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&phg));
    if (SUCCEEDED(hr))
    {
        HOMEGROUPSHARINGCHOICES sharingchoices;

        hr = phg->ShowSharingWizard(NULL, &sharingchoices);
        if (SUCCEEDED(hr))
        {
            \\ The user selected to share.
            
            if (sharingchoices & HGSC_MUSICLIBRARY)
            {
                \\ Music
            }
            if (sharingchoices & HGSC_PICTURESLIBRARY)
            {
                \\ Pictures
            }
            if (sharingchoices & HGSC_VIDEOSLIBRARY)
            {
                \\ Videos
            }
            if (sharingchoices & HGSC_DOCUMENTSLIBRARY)
            {
                \\ Documents
            }
            if (sharingchoices & HGSC_PRINTERS)
            {
                \\ Printers
            }
        }
        phg->Release();
    }
    CoUninitialize();
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IHomeGroup "{7A3BD1D9-35A9-4FB3-A467-F48CAC35E2D0}"
#usecom global IHomeGroup IID_IHomeGroup "{DE77BA04-3C92-4D11-A1A5-42352A53E0E3}"
#comfunc global IHomeGroup_IsMember           3 var
#comfunc global IHomeGroup_ShowSharingWizard  4 sptr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。