IHomeGroup
COM公式ドキュメント
コンピューターのホームグループへの参加状況を判定し、共有ウィザードを表示するためのメソッドを公開します。
解説(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。
ローカルコンピューターがホームグループのメンバーであるかどうかを判定します。
| member | BOOL* | 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);
ユーザーがホームグループを作成できるウィザードを表示し、ユーザーがウィザードを通じて選択した共有オプションを取得します。
| owner | HWND | in | 通知に使用される、ウィザードのオーナーウィンドウのハンドルです。この値は NULL にできます。 |
| sharingchoices | HOMEGROUPSHARINGCHOICES* | 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 を返し、それ以外の場合は次を含む標準的なエラー値を返します。
| 戻り値コード | 説明 |
|---|---|
| ユーザーがウィザードをキャンセルしました。このエラーコードを取り出すには HRESULT_FROM_WIN32 を使用します。 | |
| コンピューターがホームグループに参加していないか、ネットワークまたはホームグループが共有を許可する状態にありません(ネットワークに接続されていない、または別の共有操作が進行中であるなど)。 | |
| このメソッドがマルチスレッドアパートメント(MTA)スレッドから起動されました。 | |
| 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 公式リファレンス: 英語 (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 指定が可能。#define global IID_IHomeGroup "{7A3BD1D9-35A9-4FB3-A467-F48CAC35E2D0}" #usecom global IHomeGroup IID_IHomeGroup "{DE77BA04-3C92-4D11-A1A5-42352A53E0E3}" #comfunc global IHomeGroup_IsMember 3 sptr #comfunc global IHomeGroup_ShowSharingWizard 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。