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

IDirectInputJoyConfig8

COM
IIDeb0d7dfa-1990-4f27-b4d6-edf2eec4a44c継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IDirectInputJoyConfig8 インターフェイスは、プロパティ シートを作成するハードウェア開発者がレジストリに情報を書き込んだり、レジストリから情報を読み取ったりするためのメソッドを提供します。

メソッド 16

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

vtbl 3 HRESULT Acquire()

IDirectInputJoyConfig8::Acquire メソッドは「ジョイスティック構成モード」を取得します。ジョイスティック構成モードに入れるアプリケーションは同時に 1 つのみで、他のアプリケーションがこのモードを取得しようとした場合はエラー DIERR_OTHERAPPHASPRIO が返されます。構成モードに入った後、アプリケーションはグローバルなジョイスティック構成設定を変更できます。その間に別のアプリケーションが設定を変更している可能性があるため、アプリケーションは新しい設定を適用する前に既存の設定を確認してください。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_OTHERAPPHASPRIO
別のアプリケーションが既にジョイスティック構成モードに入っています。
DIERR_INSUFFICIENTPRIVS
現在のユーザーには、ジョイスティック構成を変更するために必要なアクセス許可がありません。
DIERR_DEVICECHANGE
別のアプリケーションがグローバルなジョイスティック構成を変更しました。インターフェイスを再初期化する必要があります。
vtbl 4 HRESULT Unacquire()

IDirectInputJoyConfig8::Unacquire メソッドは「ジョイスティック構成モード」を解放します。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は COM エラー コードを返します。

解説(Remarks)

構成モードを解放する前に、アプリケーションは IDirectInputJoyConfig8::SendNotify を実行して、ジョイスティック構成の変更をすべてのデバイス ドライバーおよびアプリケーションに伝達します。構成の変更によって実質的な影響を受けるジョイスティックのインターフェイスを保持しているアプリケーションは、デバイスが再初期化されるまで DIERR_DEVICECHANGE エラー コードを受け取ります。実質的な構成変更の例としては、軸の数やボタンの数の変更が挙げられます。これに対して、デバイスのキャリブレーションの変更は DirectInput が内部で処理し、アプリケーションからは透過的です。

vtbl 5 HRESULT SetCooperativeLevel(HWND param0, DWORD param1)

IDirectInputJoyConfig8::SetCooperativeLevel メソッドは、デバイスのインスタンスに対する協調レベルを設定します。IDirectInputJoyConfig8 インターフェイスでサポートされる協調レベルは DISCL_EXCLUSIVEDISCL_BACKGROUND のみです。

param0HWNDin協調レベルを関連付ける対象ウィンドウのハンドル。
param1DWORDin協調レベルフラグ。DISCL_EXCLUSIVE/DISCL_BACKGROUND等の組み合わせ。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次の COM エラー値を返します (この値は例示を目的としたものであり、必ずしも網羅的ではありません)。

戻り値 説明
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
vtbl 6 HRESULT SendNotify()

IDirectInputJoyConfig8::SendNotify メソッドは、デバイス構成が変更されたことをデバイス ドライバーおよびアプリケーションに通知します。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次の COM エラー値を返します (この値は例示を目的としたものであり、必ずしも網羅的ではありません)。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
vtbl 7 HRESULT EnumTypes(LPDIJOYTYPECALLBACK param0, void* param1)

IDirectInputJoyConfig8::EnumTypes メソッドは、現在 DirectInput がサポートしているジョイスティックの種類を列挙します。

param0LPDIJOYTYPECALLBACKin登録済みのジョイスティック種別を受け取る列挙コールバック関数。
param1void*inoutコールバックへ渡されるアプリ定義コンテキスト値。NULL可。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。

解説(Remarks)

このコールバックは、IDirectInputJoyConfig8::EnumTypes メソッドの呼び出しの結果として、DirectInput のジョイスティックの種類を受け取ります。



/*
パラメーター
pwszTypeName 
ジョイスティックの種類の名前を指します。種類名を格納するには MAX_JOYSTRING 文字のバッファーで十分です。種類名をエンド ユーザーに表示してはいけません。代わりに「表示名」を表示してください。ジョイスティックの種類の表示名を取得するには IDirectInputJoyConfig8::GetTypeInfo を使用します。シャープ記号 ("#") で始まる種類名は、変更も削除もできない定義済みの種類を表します。

pvRef 
IDirectInputJoyConfig8::EnumTypes メソッドで指定されたアプリケーション定義の値を指します。

戻り値
列挙を続行するには BOOL 値 DIENUM_CONTINUE を、列挙を停止するには DIENUM_STOP を返します。

*/


BOOL DIEnumJoyTypeProc(
   LPCWSTR pwszTypeName,
   LPVOID  pvRef
);
 


vtbl 8 HRESULT GetTypeInfo(LPWSTR param0, DIJOYTYPEINFO* param1, DWORD param2)

IDirectInputJoyConfig8::GetTypeInfo メソッドは、ジョイスティックの種類に関する情報を取得します。

param0LPWSTRin情報取得対象の種別名を示すUnicode文字列。
param1DIJOYTYPEINFO*inout種別情報を受け取るDIJOYTYPEINFO構造体へのポインタ。
param2DWORDin取得するフィールドを示すフラグ。DITC_*値の組み合わせを指定する。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
DIERR_NOTFOUND
指定されたジョイスティックの種類が見つかりませんでした。
vtbl 9 HRESULT SetTypeInfo(LPWSTR param0, DIJOYTYPEINFO* param1, DWORD param2, LPWSTR param3)

IDirectInputJoyConfig8::SetTypeInfo メソッドは、新しいジョイスティックの種類を作成するか、既存のジョイスティックの種類に関する情報を再定義します。

param0LPWSTRin設定対象の種別名を示すUnicode文字列。
param1DIJOYTYPEINFO*inout設定する種別情報を格納したDIJOYTYPEINFO構造体へのポインタ。
param2DWORDin設定するフィールドを示すフラグ。DITC_*値の組み合わせ。
param3LPWSTRin新しい種別名を示すUnicode文字列。NULL可。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
DIERR_READONLY
定義済みの種類を変更しようとしました。
vtbl 10 HRESULT DeleteType(LPWSTR param0)

IDirectInputJoyConfig8::DeleteType メソッドは、ジョイスティックの種類に関する情報を削除します。このメソッドは慎重に使用してください。削除した種類を参照するジョイスティックが存在しないことを保証するのは呼び出し元の責任です。

param0LPWSTRin削除する種別名を示すUnicode文字列。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します (これらの値は例示を目的としたものであり、必ずしも網羅的ではありません)。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティック構成の設定を変更する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
vtbl 11 HRESULT GetConfig(DWORD param0, DIJOYCONFIG* param1, DWORD param2)

IDirectInputJoyConfig8::GetConfig メソッドは、ジョイスティックの構成に関する情報を取得します。

param0DWORDin対象ジョイスティックのID番号(0起点)。
param1DIJOYCONFIG*inout構成情報を受け取るDIJOYCONFIG構造体へのポインタ。
param2DWORDin取得するフィールドを示すフラグ。DIJC_*値の組み合わせを指定する。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
S_FALSE
指定されたジョイスティックはまだ構成されていません。
DIERR_NOMOREITEMS
利用可能なジョイスティックはこれ以上ありません。
vtbl 12 HRESULT SetConfig(DWORD param0, DIJOYCONFIG* param1, DWORD param2)

IDirectInputJoyConfig8::SetConfig メソッドは、ジョイスティックの構成情報を作成または再定義します。

param0DWORDin対象ジョイスティックのID番号(0起点)。
param1DIJOYCONFIG*inout設定する構成情報を格納したDIJOYCONFIG構造体へのポインタ。
param2DWORDin設定するフィールドを示すフラグ。DIJC_*値の組み合わせ。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
vtbl 13 HRESULT DeleteConfig(DWORD param0)

IDirectInputJoyConfig8::DeleteConfig メソッドは、ジョイスティックの構成情報を削除します。

param0DWORDin削除する構成のジョイスティックID番号(0起点)。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します (これらの値は例示を目的としたものであり、必ずしも網羅的ではありません)。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティック構成の設定を変更する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
vtbl 14 HRESULT GetUserValues(DIJOYUSERVALUES* param0, DWORD param1)

IDirectInputJoyConfig8::GetUserValues メソッドは、ジョイスティックのユーザー設定に関する情報を取得します。

param0DIJOYUSERVALUES*inoutユーザー設定値を受け取るDIJOYUSERVALUES構造体へのポインタ。
param1DWORDin取得するフィールドを示すフラグ。DIJU_*値の組み合わせを指定する。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次の COM エラー値を返します。

戻り値 説明
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
vtbl 15 HRESULT SetUserValues(DIJOYUSERVALUES* param0, DWORD param1)

IDirectInputJoyConfig8::SetUserValues メソッドは、ジョイスティックのユーザー設定を設定します。

param0DIJOYUSERVALUES*inout設定するユーザー設定値を格納したDIJOYUSERVALUES構造体へのポインタ。
param1DWORDin設定するフィールドを示すフラグ。DIJU_*値の組み合わせ。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティック構成の変更をアプリケーションおよびドライバーに通知する前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
vtbl 16 HRESULT AddNewHardware(HWND param0, GUID* param1)

IDirectInputJoyConfig8::AddNewHardware メソッドは、[ハードウェアの追加] ダイアログ ボックスを表示し、新しい入力デバイスのインストール手順をユーザーに案内します。

param0HWNDinハードウェア追加ウィザード表示時の親ウィンドウハンドル。
param1GUID*in追加するデバイスのクラスGUIDへのポインタ。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_INVALIDPARAM
(E_INVALIDARG)。1 つ以上のパラメーターが無効でした。
DIERR_INVALIDCLASSINSTALLER
指定されたデバイスのクラス インストーラーが見つからないか、無効です。
DIERR_CANCELLED
ユーザーが操作をキャンセルしました。
DIERR_BADINF
ユーザーが選択したデバイスの INF ファイルが見つからないか、無効または破損しています。
S_FALSE
操作が正常に完了したかどうかを DirectInput が判断できませんでした。
vtbl 17 HRESULT OpenTypeKey(LPWSTR param0, DWORD param1, HKEY* param2)

IDirectInputJoyConfig8::OpenTypeKey メソッドは、ジョイスティックの種類に関連付けられたレジストリ キーを開きます。

param0LPWSTRin開く種別名を示すUnicode文字列。
param1DWORDinレジストリアクセス権を示すフラグ。KEY_READ等を指定する。
param2HKEY*inout開かれたレジストリキーのハンドルを受け取るHKEYへのポインタ。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。

戻り値 説明
DIERR_NOTACQUIRED
ジョイスティック構成が取得されていません。ジョイスティックの種類の構成キーを書き込み用に開く前に、IDirectInputJoyConfig8::Acquire を呼び出す必要があります。
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ErrorCode)
レジストリのアクセス許可やその他の外部要因によってキーへのアクセスが拒否された場合の Win32 エラー コード。

解説(Remarks)

コントロール パネル アプリケーションは、このメソッドで開いたレジストリ キーを使用して、グローバル構成パラメーターなどの種類ごとの永続的な情報を保存できます。そのようなプライベートな情報は OEM という名前のサブキーに保存してください。メインの種類キーにプライベートな情報を保存しないでください。コントロール パネル アプリケーションは、デバイスのキャリブレーション用プロンプトに使用する文字列などの構成情報の読み取りにも、このキーを使用できます。アプリケーションは RegCloseKey を使用してレジストリ キーを閉じてください。

vtbl 18 HRESULT OpenAppStatusKey(HKEY* param0)

IDirectInputJoyConfig8::OpenAppStatusKey メソッドは、アプリケーション ステータス レジストリ キーのルート キーを開き、そのキーへのハンドルを出力パラメーターとして取得します。

param0HKEY*inoutアプリ状態レジストリキーのハンドルを受け取るHKEYへのポインタ。

戻り値

成功した場合は DI_OK を返します。それ以外の場合は、次のいずれかの COM エラー値を返します。以下のエラー コードは例示を目的としたものであり、必ずしも網羅的ではありません。

戻り値 説明
DIERR_INVALIDPARAM
1 つ以上のパラメーターが無効でした。
DIERR_NOTFOUND
このシステムにはキーが存在しません。アプリケーションは、キーが空であるものとして処理を続行してください。

解説(Remarks)

phKey パラメーターで返されるレジストリ キー ハンドルは、標準の Win32 レジストリ関数で使用できます。Dinputd.h ヘッダー ファイルには、アプリケーション ステータスのルート キーに含まれるサブキーや名前付きの値にアクセスするための文字列定数が定義されています。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。