IDirectInputJoyConfig8
COM公式ドキュメント
IDirectInputJoyConfig8 インターフェイスは、プロパティ シートを作成するハードウェア開発者がレジストリに情報を書き込んだり、レジストリから情報を読み取ったりするためのメソッドを提供します。
メソッド 16
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDirectInputJoyConfig8::Acquire メソッドは「ジョイスティック構成モード」を取得します。ジョイスティック構成モードに入れるアプリケーションは同時に 1 つのみで、他のアプリケーションがこのモードを取得しようとした場合はエラー DIERR_OTHERAPPHASPRIO が返されます。構成モードに入った後、アプリケーションはグローバルなジョイスティック構成設定を変更できます。その間に別のアプリケーションが設定を変更している可能性があるため、アプリケーションは新しい設定を適用する前に既存の設定を確認してください。
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| 別のアプリケーションが既にジョイスティック構成モードに入っています。 | |
| 現在のユーザーには、ジョイスティック構成を変更するために必要なアクセス許可がありません。 | |
|
別のアプリケーションがグローバルなジョイスティック構成を変更しました。インターフェイスを再初期化する必要があります。 |
IDirectInputJoyConfig8::Unacquire メソッドは「ジョイスティック構成モード」を解放します。
戻り値
成功した場合は DI_OK を返します。それ以外の場合は COM エラー コードを返します。
解説(Remarks)
構成モードを解放する前に、アプリケーションは IDirectInputJoyConfig8::SendNotify を実行して、ジョイスティック構成の変更をすべてのデバイス ドライバーおよびアプリケーションに伝達します。構成の変更によって実質的な影響を受けるジョイスティックのインターフェイスを保持しているアプリケーションは、デバイスが再初期化されるまで DIERR_DEVICECHANGE エラー コードを受け取ります。実質的な構成変更の例としては、軸の数やボタンの数の変更が挙げられます。これに対して、デバイスのキャリブレーションの変更は DirectInput が内部で処理し、アプリケーションからは透過的です。
IDirectInputJoyConfig8::SetCooperativeLevel メソッドは、デバイスのインスタンスに対する協調レベルを設定します。IDirectInputJoyConfig8 インターフェイスでサポートされる協調レベルは DISCL_EXCLUSIVE と DISCL_BACKGROUND のみです。
| param0 | HWND | in | 協調レベルを関連付ける対象ウィンドウのハンドル。 |
| param1 | DWORD | in | 協調レベルフラグ。DISCL_EXCLUSIVE/DISCL_BACKGROUND等の組み合わせ。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次の COM エラー値を返します (この値は例示を目的としたものであり、必ずしも網羅的ではありません)。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上のパラメーターが無効でした。 |
IDirectInputJoyConfig8::SendNotify メソッドは、デバイス構成が変更されたことをデバイス ドライバーおよびアプリケーションに通知します。
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次の COM エラー値を返します (この値は例示を目的としたものであり、必ずしも網羅的ではありません)。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 |
IDirectInputJoyConfig8::EnumTypes メソッドは、現在 DirectInput がサポートしているジョイスティックの種類を列挙します。
| param0 | LPDIJOYTYPECALLBACK | in | 登録済みのジョイスティック種別を受け取る列挙コールバック関数。 |
| param1 | void* | inout | コールバックへ渡されるアプリ定義コンテキスト値。NULL可。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上のパラメーターが無効でした。 |
解説(Remarks)
このコールバックは、IDirectInputJoyConfig8::EnumTypes メソッドの呼び出しの結果として、DirectInput のジョイスティックの種類を受け取ります。
/*
パラメーター
pwszTypeName
ジョイスティックの種類の名前を指します。種類名を格納するには MAX_JOYSTRING 文字のバッファーで十分です。種類名をエンド ユーザーに表示してはいけません。代わりに「表示名」を表示してください。ジョイスティックの種類の表示名を取得するには IDirectInputJoyConfig8::GetTypeInfo を使用します。シャープ記号 ("#") で始まる種類名は、変更も削除もできない定義済みの種類を表します。
pvRef
IDirectInputJoyConfig8::EnumTypes メソッドで指定されたアプリケーション定義の値を指します。
戻り値
列挙を続行するには BOOL 値 DIENUM_CONTINUE を、列挙を停止するには DIENUM_STOP を返します。
*/
BOOL DIEnumJoyTypeProc(
LPCWSTR pwszTypeName,
LPVOID pvRef
);
IDirectInputJoyConfig8::GetTypeInfo メソッドは、ジョイスティックの種類に関する情報を取得します。
| param0 | LPWSTR | in | 情報取得対象の種別名を示すUnicode文字列。 |
| param1 | DIJOYTYPEINFO* | inout | 種別情報を受け取るDIJOYTYPEINFO構造体へのポインタ。 |
| param2 | DWORD | in | 取得するフィールドを示すフラグ。DITC_*値の組み合わせを指定する。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上のパラメーターが無効でした。 | |
| 指定されたジョイスティックの種類が見つかりませんでした。 |
IDirectInputJoyConfig8::SetTypeInfo メソッドは、新しいジョイスティックの種類を作成するか、既存のジョイスティックの種類に関する情報を再定義します。
| param0 | LPWSTR | in | 設定対象の種別名を示すUnicode文字列。 |
| param1 | DIJOYTYPEINFO* | inout | 設定する種別情報を格納したDIJOYTYPEINFO構造体へのポインタ。 |
| param2 | DWORD | in | 設定するフィールドを示すフラグ。DITC_*値の組み合わせ。 |
| param3 | LPWSTR | in | 新しい種別名を示すUnicode文字列。NULL可。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 | |
| 1 つ以上のパラメーターが無効でした。 | |
| 定義済みの種類を変更しようとしました。 |
IDirectInputJoyConfig8::DeleteType メソッドは、ジョイスティックの種類に関する情報を削除します。このメソッドは慎重に使用してください。削除した種類を参照するジョイスティックが存在しないことを保証するのは呼び出し元の責任です。
| param0 | LPWSTR | in | 削除する種別名を示すUnicode文字列。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します (これらの値は例示を目的としたものであり、必ずしも網羅的ではありません)。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティック構成の設定を変更する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 | |
| 1 つ以上のパラメーターが無効でした。 |
IDirectInputJoyConfig8::GetConfig メソッドは、ジョイスティックの構成に関する情報を取得します。
| param0 | DWORD | in | 対象ジョイスティックのID番号(0起点)。 |
| param1 | DIJOYCONFIG* | inout | 構成情報を受け取るDIJOYCONFIG構造体へのポインタ。 |
| param2 | DWORD | in | 取得するフィールドを示すフラグ。DIJC_*値の組み合わせを指定する。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上のパラメーターが無効でした。 | |
| 指定されたジョイスティックはまだ構成されていません。 | |
| 利用可能なジョイスティックはこれ以上ありません。 |
IDirectInputJoyConfig8::SetConfig メソッドは、ジョイスティックの構成情報を作成または再定義します。
| param0 | DWORD | in | 対象ジョイスティックのID番号(0起点)。 |
| param1 | DIJOYCONFIG* | inout | 設定する構成情報を格納したDIJOYCONFIG構造体へのポインタ。 |
| param2 | DWORD | in | 設定するフィールドを示すフラグ。DIJC_*値の組み合わせ。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 | |
| 1 つ以上のパラメーターが無効でした。 |
IDirectInputJoyConfig8::DeleteConfig メソッドは、ジョイスティックの構成情報を削除します。
| param0 | DWORD | in | 削除する構成のジョイスティックID番号(0起点)。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します (これらの値は例示を目的としたものであり、必ずしも網羅的ではありません)。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティック構成の設定を変更する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 | |
| 1 つ以上のパラメーターが無効でした。 |
IDirectInputJoyConfig8::GetUserValues メソッドは、ジョイスティックのユーザー設定に関する情報を取得します。
| param0 | DIJOYUSERVALUES* | inout | ユーザー設定値を受け取るDIJOYUSERVALUES構造体へのポインタ。 |
| param1 | DWORD | in | 取得するフィールドを示すフラグ。DIJU_*値の組み合わせを指定する。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次の COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上のパラメーターが無効でした。 |
IDirectInputJoyConfig8::SetUserValues メソッドは、ジョイスティックのユーザー設定を設定します。
| param0 | DIJOYUSERVALUES* | inout | 設定するユーザー設定値を格納したDIJOYUSERVALUES構造体へのポインタ。 |
| param1 | DWORD | in | 設定するフィールドを示すフラグ。DIJU_*値の組み合わせ。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 | |
| 1 つ以上のパラメーターが無効でした。 |
IDirectInputJoyConfig8::AddNewHardware メソッドは、[ハードウェアの追加] ダイアログ ボックスを表示し、新しい入力デバイスのインストール手順をユーザーに案内します。
| param0 | HWND | in | ハードウェア追加ウィザード表示時の親ウィンドウハンドル。 |
| param1 | GUID* | in | 追加するデバイスのクラスGUIDへのポインタ。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| (E_INVALIDARG)。1 つ以上のパラメーターが無効でした。 | |
| 指定されたデバイスのクラス インストーラーが見つからないか、無効です。 | |
| ユーザーが操作をキャンセルしました。 | |
| ユーザーが選択したデバイスの INF ファイルが見つからないか、無効または破損しています。 | |
| 操作が正常に完了したかどうかを DirectInput が判断できませんでした。 |
IDirectInputJoyConfig8::OpenTypeKey メソッドは、ジョイスティックの種類に関連付けられたレジストリ キーを開きます。
| param0 | LPWSTR | in | 開く種別名を示すUnicode文字列。 |
| param1 | DWORD | in | レジストリアクセス権を示すフラグ。KEY_READ等を指定する。 |
| param2 | HKEY* | inout | 開かれたレジストリキーのハンドルを受け取るHKEYへのポインタ。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。
| 戻り値 | 説明 |
|---|---|
| ジョイスティック構成が取得されていません。ジョイスティックの種類の構成キーを書き込み用に開く前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。 | |
| 1 つ以上のパラメーターが無効でした。 | |
|
レジストリのアクセス許可やその他の外部要因によってキーへのアクセスが拒否された場合の Win32 エラー コード。 |
解説(Remarks)
コントロール パネル アプリケーションは、このメソッドで開いたレジストリ キーを使用して、グローバル構成パラメーターなどの種類ごとの永続的な情報を保存できます。そのようなプライベートな情報は OEM という名前のサブキーに保存してください。メインの種類キーにプライベートな情報を保存しないでください。コントロール パネル アプリケーションは、デバイスのキャリブレーション用プロンプトに使用する文字列などの構成情報の読み取りにも、このキーを使用できます。アプリケーションは RegCloseKey を使用してレジストリ キーを閉じてください。
IDirectInputJoyConfig8::OpenAppStatusKey メソッドは、アプリケーション ステータス レジストリ キーのルート キーを開き、そのキーへのハンドルを出力パラメーターとして取得します。
| param0 | HKEY* | inout | アプリ状態レジストリキーのハンドルを受け取るHKEYへのポインタ。 |
戻り値
成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。以下のエラー コードは例示を目的としたものであり、必ずしも網羅的ではありません。
| 戻り値 | 説明 |
|---|---|
| 1 つ以上のパラメーターが無効でした。 | |
| このシステムにはキーが存在しません。アプリケーションは、キーが空であるものとして処理を続行してください。 |
解説(Remarks)
phKey パラメーターで返されるレジストリ キー ハンドルは、標準の Win32 レジストリ関数で使用できます。Dinputd.h ヘッダー ファイルには、アプリケーション ステータスのルート キーに含まれるサブキーや名前付きの値にアクセスするための文字列定数が定義されています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirectInputJoyConfig8 "{EB0D7DFA-1990-4F27-B4D6-EDF2EEC4A44C}" #usecom global IDirectInputJoyConfig8 IID_IDirectInputJoyConfig8 "{}" #comfunc global IDirectInputJoyConfig8_Acquire 3 #comfunc global IDirectInputJoyConfig8_Unacquire 4 #comfunc global IDirectInputJoyConfig8_SetCooperativeLevel 5 sptr,int #comfunc global IDirectInputJoyConfig8_SendNotify 6 #comfunc global IDirectInputJoyConfig8_EnumTypes 7 sptr,sptr #comfunc global IDirectInputJoyConfig8_GetTypeInfo 8 wstr,var,int #comfunc global IDirectInputJoyConfig8_SetTypeInfo 9 wstr,var,int,wstr #comfunc global IDirectInputJoyConfig8_DeleteType 10 wstr #comfunc global IDirectInputJoyConfig8_GetConfig 11 int,var,int #comfunc global IDirectInputJoyConfig8_SetConfig 12 int,var,int #comfunc global IDirectInputJoyConfig8_DeleteConfig 13 int #comfunc global IDirectInputJoyConfig8_GetUserValues 14 var,int #comfunc global IDirectInputJoyConfig8_SetUserValues 15 var,int #comfunc global IDirectInputJoyConfig8_AddNewHardware 16 sptr,var #comfunc global IDirectInputJoyConfig8_OpenTypeKey 17 wstr,int,sptr #comfunc global IDirectInputJoyConfig8_OpenAppStatusKey 18 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirectInputJoyConfig8 "{EB0D7DFA-1990-4F27-B4D6-EDF2EEC4A44C}" #usecom global IDirectInputJoyConfig8 IID_IDirectInputJoyConfig8 "{}" #comfunc global IDirectInputJoyConfig8_Acquire 3 #comfunc global IDirectInputJoyConfig8_Unacquire 4 #comfunc global IDirectInputJoyConfig8_SetCooperativeLevel 5 sptr,int #comfunc global IDirectInputJoyConfig8_SendNotify 6 #comfunc global IDirectInputJoyConfig8_EnumTypes 7 sptr,sptr #comfunc global IDirectInputJoyConfig8_GetTypeInfo 8 wstr,sptr,int #comfunc global IDirectInputJoyConfig8_SetTypeInfo 9 wstr,sptr,int,wstr #comfunc global IDirectInputJoyConfig8_DeleteType 10 wstr #comfunc global IDirectInputJoyConfig8_GetConfig 11 int,sptr,int #comfunc global IDirectInputJoyConfig8_SetConfig 12 int,sptr,int #comfunc global IDirectInputJoyConfig8_DeleteConfig 13 int #comfunc global IDirectInputJoyConfig8_GetUserValues 14 sptr,int #comfunc global IDirectInputJoyConfig8_SetUserValues 15 sptr,int #comfunc global IDirectInputJoyConfig8_AddNewHardware 16 sptr,sptr #comfunc global IDirectInputJoyConfig8_OpenTypeKey 17 wstr,int,sptr #comfunc global IDirectInputJoyConfig8_OpenAppStatusKey 18 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。