ISensorManager
COM公式ドキュメント
利用可能なセンサーを検出および取得するためのメソッドと、センサーマネージャーのイベントを要求するメソッドを提供します。
解説(Remarks)
このインターフェイスへのポインターは、COM の CoCreateInstance メソッドを呼び出して取得します。グループポリシーがこのオブジェクトの作成を許可していない場合、CoCreateInstance は HRESULT_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。
指定されたカテゴリに関連付けられているすべてのセンサーを含むコレクションを取得します。
| sensorCategory | GUID* | in | 取得するセンサーカテゴリの ID。 |
| ppSensorsFound | ISensorCollection** | out | 要求されたセンサーコレクションへのポインターを受け取る ISensorCollection インターフェイスポインターのアドレス。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
|
指定されたカテゴリで利用可能なセンサーがありません。 |
| メソッドは成功しました。 | |
| ppSensorsFound に NULL が渡されました。 |
指定された種類に関連付けられているすべてのセンサーを含むコレクションを取得します。
| sensorType | GUID* | in | 取得するセンサーの種類の ID。 |
| ppSensorsFound | ISensorCollection** | out | 要求されたセンサーコレクションへのポインターを受け取る ISensorCollection インターフェイスポインターのアドレス。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
指定された種類で利用可能なセンサーがありません。 |
| ppSensorsFound に NULL が渡されました。 |
指定されたセンサーへのポインターを取得します。
| sensorID | GUID* | in | 取得するセンサーの ID。 |
| ppSensor | ISensor** | out | 要求されたセンサーへのポインターを受け取る ISensor インターフェイスポインターのアドレス。 要求されたセンサーが見つからない場合は NULL になります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 | |
| センサーマネージャーが、同じ ID を持つ複数のセンサーを検出しました。 | |
|
指定された ID で利用可能なセンサーがありません。 |
| ppSensor に NULL が渡されました。 |
センサーマネージャーのイベント通知を受け取るためのインターフェイスを指定します。
| pEvents | ISensorManagerEvents* | inoptional | イベント通知を受け取る ISensorManagerEvents コールバックインターフェイスへのポインター。 イベント通知の受信を停止するには NULL を設定します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 |
センサーデータへのアクセスに対するユーザーのアクセス許可を要求するために、システムダイアログボックスを開きます。
| hParent | HWND | in | Windows 8 の場合、hParent に値を指定すると、ダイアログは親ウィンドウに対してモーダルになります。 hParent が NULL の場合、ダイアログはモーダルになりません。 ダイアログは常に同期的です。 Windows 7 の場合、HWND はアクセス許可ダイアログボックスの親となることができるウィンドウのハンドルです。 fModal が TRUE の場合は NULL にする必要があります。 |
| pSensors | ISensorCollection* | inoptional | Windows 8 の場合、この値は使用されません。 Windows 7 の場合、pSensors は、アクセス許可を要求するセンサーの一覧を含む ISensorCollection インターフェイスへのポインターです。 |
| fModal | BOOL | in | Windows 8 の場合、この値は使用されません。 モーダル性の制御については hParent を参照してください。 Windows 7 の場合、fModal はダイアログボックスのモードを指定する BOOL です。 hParent が null 以外の場合は FALSE にする必要があります。 |
戻り値
次の表は、同期的な結果のリターンコードについて説明します。
| リターンコード | 説明 |
|---|---|
| ユーザーがセンサーを有効にしました。 | |
|
ユーザーがセンサーを無効にすることを選択しました。 |
|
ユーザーがダイアログボックスをキャンセルしたか、ダイアログボックスを表示するためのアクセス許可の昇格を拒否しました。 |
次の表は、非同期的な結果のリターンコードについて説明します。
| リターンコード | 説明 |
|---|---|
| センサーコレクション内のすべてのセンサーが、ユーザーが有効にできるように表示されました。 メソッドは成功しました。 | |
| センサーコレクション内の一部のセンサーが、ユーザーが有効にできるように表示されました。 一部のセンサーはコレクションから削除された可能性があります。たとえば、ユーザーが以前にそれらを無効のままにすることを選択していた場合などです。 メソッドは成功しました。 | |
| 引数が無効です。 | |
| ポインターが null です。 | |
|
センサーコレクション内のすべてのセンサーが、以前にユーザーによって無効にされていました。 ダイアログボックスは表示されませんでした。 |
解説(Remarks)
Windows アプリケーションのユーザーインターフェイス (UI) スレッドから同期呼び出しを行うと、UI スレッドがブロックされ、アプリケーションの応答性が低下する可能性があります。 これを防ぐには、fModal を TRUE に設定した状態で、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 公式リファレンス: 英語 (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 指定が可能。#define global IID_ISensorManager "{BD77DB67-45A8-42DC-8D00-6DCF15F8377A}" #usecom global ISensorManager IID_ISensorManager "{77A1C827-FCD2-4689-8915-9D613CC5FA3E}" #comfunc global ISensorManager_GetSensorsByCategory 3 sptr,sptr #comfunc global ISensorManager_GetSensorsByType 4 sptr,sptr #comfunc global ISensorManager_GetSensorByID 5 sptr,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から自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。