Win32 API 日本語リファレンス
ホームDevices.Sensors › ISensorManager

ISensorManager

COM
IIDbd77db67-45a8-42dc-8d00-6dcf15f8377a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

利用可能なセンサーを検出および取得するためのメソッドと、センサーマネージャーのイベントを要求するメソッドを提供します。

解説(Remarks)

このインターフェイスへのポインターは、COM の CoCreateInstance メソッドを呼び出して取得します。グループポリシーがこのオブジェクトの作成を許可していない場合、CoCreateInstanceHRESULT_FROM_WIN32 (ERROR_ACCESS_DISABLED_BY_POLICY) を返します。

次のサンプルコードは、センサーマネージャーのインスタンスを作成します。

// センサーマネージャーを作成します。
hr = CoCreateInstance(CLSID_SensorManager, 
                        NULL, CLSCTX_INPROC_SERVER,
                        IID_PPV_ARGS(&pSensorManager));

if(hr == HRESULT_FROM_WIN32(ERROR_ACCESS_DISABLED_BY_POLICY))
{
    // グループポリシーの設定により
    // センサーマネージャーを取得できません。ユーザーに通知します。
}

メソッド 5

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

vtbl 3 HRESULT GetSensorsByCategory(GUID* sensorCategory, ISensorCollection** ppSensorsFound)

指定されたカテゴリに関連付けられているすべてのセンサーを含むコレクションを取得します。

sensorCategoryGUID*in取得するセンサーカテゴリの ID。
ppSensorsFoundISensorCollection**out要求されたセンサーコレクションへのポインターを受け取る ISensorCollection インターフェイスポインターのアドレス。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
指定されたカテゴリで利用可能なセンサーがありません。
S_OK
メソッドは成功しました。
E_POINTER
ppSensorsFound に NULL が渡されました。
vtbl 4 HRESULT GetSensorsByType(GUID* sensorType, ISensorCollection** ppSensorsFound)

指定された種類に関連付けられているすべてのセンサーを含むコレクションを取得します。

sensorTypeGUID*in取得するセンサーの種類の ID。
ppSensorsFoundISensorCollection**out要求されたセンサーコレクションへのポインターを受け取る ISensorCollection インターフェイスポインターのアドレス。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
指定された種類で利用可能なセンサーがありません。
E_POINTER
ppSensorsFound に NULL が渡されました。
vtbl 5 HRESULT GetSensorByID(GUID* sensorID, ISensor** ppSensor)

指定されたセンサーへのポインターを取得します。

sensorIDGUID*in取得するセンサーの ID。
ppSensorISensor**out要求されたセンサーへのポインターを受け取る ISensor インターフェイスポインターのアドレス。 要求されたセンサーが見つからない場合は NULL になります。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_UNEXPECTED
センサーマネージャーが、同じ ID を持つ複数のセンサーを検出しました。
HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
指定された ID で利用可能なセンサーがありません。
E_POINTER
ppSensor に NULL が渡されました。
vtbl 6 HRESULT SetEventSink(ISensorManagerEvents* pEvents)

センサーマネージャーのイベント通知を受け取るためのインターフェイスを指定します。

pEventsISensorManagerEvents*inoptionalイベント通知を受け取る ISensorManagerEvents コールバックインターフェイスへのポインター。 イベント通知の受信を停止するには NULL を設定します。

戻り値

このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
vtbl 7 HRESULT RequestPermissions(HWND hParent, ISensorCollection* pSensors, BOOL fModal)

センサーデータへのアクセスに対するユーザーのアクセス許可を要求するために、システムダイアログボックスを開きます。

hParentHWNDin

Windows 8 の場合、hParent に値を指定すると、ダイアログは親ウィンドウに対してモーダルになります。 hParentNULL の場合、ダイアログはモーダルになりません。 ダイアログは常に同期的です。

Windows 7 の場合、HWND はアクセス許可ダイアログボックスの親となることができるウィンドウのハンドルです。 fModalTRUE の場合は NULL にする必要があります。

pSensorsISensorCollection*inoptional

Windows 8 の場合、この値は使用されません。

Windows 7 の場合、pSensors は、アクセス許可を要求するセンサーの一覧を含む ISensorCollection インターフェイスへのポインターです。

fModalBOOLin

Windows 8 の場合、この値は使用されません。 モーダル性の制御については hParent を参照してください。

Windows 7 の場合、fModal はダイアログボックスのモードを指定する BOOL です。 hParent が null 以外の場合は FALSE にする必要があります。

意味
TRUE
hParentNULL の場合、ダイアログボックスはモーダルとなり、ユーザーが応答するまで Windows 内で排他的なフォーカスを持ちます。 呼び出しは同期的です。 戻り値のコードはユーザーの選択を示します。 「戻り値」を参照してください。

hParent が null 以外の場合、呼び出しは非同期であり、呼び出し元のスレッドはダイアログボックスが閉じられるのを待ちません。 戻り値のコードは呼び出しが成功したかどうかを示します。 「戻り値」を参照してください。

FALSE
ダイアログボックスはモードレスです。 呼び出しは非同期であり、呼び出し元のスレッドはダイアログボックスが閉じられるのを待ちません。 戻り値のコードは呼び出しが成功したかどうかを示します。 「戻り値」を参照してください。

hParent パラメーターは無視されます。

戻り値

次の表は、同期的な結果のリターンコードについて説明します。

リターンコード 説明
S_OK
ユーザーがセンサーを有効にしました。
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
ユーザーがセンサーを無効にすることを選択しました。
HRESULT_FROM_WIN32(ERROR_CANCELLED)
ユーザーがダイアログボックスをキャンセルしたか、ダイアログボックスを表示するためのアクセス許可の昇格を拒否しました。
 

次の表は、非同期的な結果のリターンコードについて説明します。

リターンコード 説明
S_OK
センサーコレクション内のすべてのセンサーが、ユーザーが有効にできるように表示されました。 メソッドは成功しました。
S_FALSE
センサーコレクション内の一部のセンサーが、ユーザーが有効にできるように表示されました。 一部のセンサーはコレクションから削除された可能性があります。たとえば、ユーザーが以前にそれらを無効のままにすることを選択していた場合などです。 メソッドは成功しました。
E_INVALIDARG
引数が無効です。
E_POINTER
ポインターが null です。
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
センサーコレクション内のすべてのセンサーが、以前にユーザーによって無効にされていました。 ダイアログボックスは表示されませんでした。

解説(Remarks)

Windows アプリケーションのユーザーインターフェイス (UI) スレッドから同期呼び出しを行うと、UI スレッドがブロックされ、アプリケーションの応答性が低下する可能性があります。 これを防ぐには、fModalTRUE に設定した状態で、UI スレッドからこのメソッドを呼び出さないでください。

注意  

Internet Explorer が保護モードで実行されているときの Internet Explorer 用の Browser Helper Object (BHO) のように、保護モードで実行されているアプリケーションまたはプラグインが RequestPermissions を呼び出し、ユーザーがダイアログボックスで この位置センサーを有効にしない オプションを選択した場合、同じユーザーが再び RequestPermissions を呼び出すと、Windows は再度ダイアログボックスを表示します。 保護モードで実行されるアプリケーションは、アプリケーションの起動ごとにユーザーが不要なダイアログボックスにさらされることがないように、起動時に RequestPermissions を呼び出さないようにすることを選択できます。

 

次のサンプルコードは、非同期メソッド呼び出しを使用して、センサーマネージャーから種類別に取得したすべてのセンサーに対するアクセス許可を要求します。 プラットフォームは、まだ有効になっていないセンサーのみをユーザーに有効化するよう促します。 この場合にユーザーがいずれかのセンサーを有効にしたかどうかを判断するには、ISensorEvents::OnStateChanged イベントを処理する必要があります。 アクセス許可を要求する方法を示す追加の例については、ユーザーアクセス許可の要求を参照してください。

// センサーコレクションを取得します。
hr = pSensorManager->GetSensorsByType(SAMPLE_SENSOR_TYPE_TIME, &pSensorColl);

if(SUCCEEDED(hr))
{
    // コレクション内のすべてのセンサーに対する
    // アクセス許可を要求します。
    hr = pSensorManager->RequestPermissions(0, pSensorColl, FALSE);
}

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ISensorManager "{BD77DB67-45A8-42DC-8D00-6DCF15F8377A}"
#usecom global ISensorManager IID_ISensorManager "{77A1C827-FCD2-4689-8915-9D613CC5FA3E}"
#comfunc global ISensorManager_GetSensorsByCategory  3 var,sptr
#comfunc global ISensorManager_GetSensorsByType      4 var,sptr
#comfunc global ISensorManager_GetSensorByID         5 var,sptr
#comfunc global ISensorManager_SetEventSink          6 sptr
#comfunc global ISensorManager_RequestPermissions    7 sptr,sptr,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。