IApplicationAssociationRegistration
COM公式ドキュメント
特定のファイル関連付けの種類 (Association Type) やプロトコルに対して、特定の関連付けレベル (Association Level) における既定のアプリケーションを照会および設定するメソッドを公開します。
解説(Remarks)
IApplicationAssociationRegistration は Windows Vista および Windows 7 でのみサポートされているため、それ以前のオペレーティングシステムをサポートするアプリケーションは、それらのオペレーティングシステム上で動作する場合、既定に関して既存のコードを使用する必要があります。そうしたアプリケーションでは、この点に対応するためにオペレーティングシステムのバージョンをチェックする処理を含めるべきです。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定した関連付けの種類に対する既定のアプリケーションを判定します。これは、その種類に対して ShellExecute によって起動される既定のアプリケーションです。
| pszQuery | LPWSTR | in | .mp3 や http など、ファイル名拡張子またはプロトコルを含む、null 終端の Unicode 文字列へのポインター。 |
| atQueryType | ASSOCIATIONTYPE | in | 拡張子や MIME タイプなど、関連付けの種類を指定する ASSOCIATIONTYPE 列挙値のいずれか。 |
| alQueryLevel | ASSOCIATIONLEVEL | in | ユーザーごとやマシンごとなど、関連付けのレベルを指定する ASSOCIATIONLEVEL 列挙値のいずれか。通常は AL_EFFECTIVE です。 |
| ppszAssociation | LPWSTR* | out | このメソッドが返るとき、現在の既定の関連付けを識別する ProgID へのポインターのアドレスが格納されます。 注意 この文字列を CoTaskMemFree によって解放するのは、呼び出し元アプリケーションの責任です。
|
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
生成される文字列は、通常、登録されたアプリケーションに関連付けられたいずれかの ProgID と一致する ProgID ですが、いくつかの例外があります。返される文字列がマシン既定のプロトコルである場合、それは ProgID ではなく .exe ハンドラーへのコマンドラインを示すレガシー文字列です。同様に、マシン既定の MIME タイプを返す場合は、ProgID ではなくレガシーのクラス識別子 (CLSID) 文字列を返します。
指定したアプリケーションレベルおよび種類に対して、あるアプリケーションが登録された既定の関連付けを所有しているかどうかを判定します。Windows 8 での使用は想定されていません。
| pszQuery | LPWSTR | in | .mp3 や http など、アプリケーションのファイル名拡張子またはプロトコルを含む、null 終端の Unicode 文字列へのポインター。 |
| atQueryType | ASSOCIATIONTYPE | in | ファイル名拡張子や MIME タイプなど、pszQuery で指定されたアプリケーションの種類を指定する ASSOCIATIONTYPE 列挙値のいずれか。 |
| alQueryLevel | ASSOCIATIONLEVEL | in | ユーザーごとやマシンごとなど、関連付けのレベルを指定する ASSOCIATIONLEVEL 列挙値のいずれか。通常は AL_EFFECTIVE です。 |
| pszAppRegistryName | LPWSTR | in | アプリケーションの登録名を指定する、null 終端の Unicode 文字列へのポインター。 |
| pfDefault | BOOL* | out | このメソッドが返るとき、アプリケーションが既定である場合は TRUE を、そうでない場合は FALSE を格納します。 |
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定したアプリケーションレベルに対して、あるアプリケーションが登録された既定の関連付けをすべて所有しているかどうかを判定します。Windows 8 での使用は想定されていません。
| alQueryLevel | ASSOCIATIONLEVEL | in | ユーザーごとやマシンごとなど、関連付けのレベルを指定する ASSOCIATIONLEVEL 列挙値のいずれか。通常は AL_EFFECTIVE です。 |
| pszAppRegistryName | LPWSTR | in | アプリケーションの登録名を指定する、null 終端の Unicode 文字列へのポインター。 |
| pfDefault | BOOL* | out | このメソッドが返るとき、指定した ASSOCIATIONLEVEL におけるすべての 関連付けの種類に対してアプリケーションが既定である場合は TRUE を、 そうでない場合は FALSE を格納します。 |
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アプリケーションの発行元が現在の既定の発行元と一致する場合に、そのアプリケーションを指定した拡張子またはプロトコルの既定として設定します。詳細については、「Default Programs」を参照してください。Windows 8 での使用は想定されていません。
| pszAppRegistryName | LPWSTR | in | 既定に設定するアプリケーションのレジストリ登録名を指定する文字列である。 |
| pszSet | LPWSTR | in | 既定に設定する拡張子またはプロトコル名を指定する文字列である。 |
| atSetType | ASSOCIATIONTYPE | in | ファイル名拡張子や MIME タイプなど、extOrUriScheme で指定されたアプリケーションの種類を指定する ASSOCIATIONTYPE 列挙値のいずれか。 |
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。特に、アプリケーションの発行元が既定の発行元と一致しない場合、このメソッドは E_ACCESSDENIED を返します。
そのアプリケーションに対して登録された、あらゆる種類のすべての関連付けの既定として、アプリケーションを設定します。Windows 8 での使用は想定されていません。
| pszAppRegistryName | LPWSTR | in | アプリケーションの登録名を指定する、null 終端の Unicode 文字列へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
現在のユーザーに対するユーザーごとの関連付けをすべて削除します。これにより、マシン既定が存在する場合はマシン既定へ戻ります。Windows 8 での使用は想定されていません。
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IApplicationAssociationRegistration "{4E530B0A-E611-4C77-A3AC-9031D022281B}" #usecom global IApplicationAssociationRegistration IID_IApplicationAssociationRegistration "{591209C7-767B-42B2-9FBA-44EE4615F2C7}" #comfunc global IApplicationAssociationRegistration_QueryCurrentDefault 3 wstr,int,int,var #comfunc global IApplicationAssociationRegistration_QueryAppIsDefault 4 wstr,int,int,wstr,var #comfunc global IApplicationAssociationRegistration_QueryAppIsDefaultAll 5 int,wstr,var #comfunc global IApplicationAssociationRegistration_SetAppAsDefault 6 wstr,wstr,int #comfunc global IApplicationAssociationRegistration_SetAppAsDefaultAll 7 wstr #comfunc global IApplicationAssociationRegistration_ClearUserAssociations 8 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IApplicationAssociationRegistration "{4E530B0A-E611-4C77-A3AC-9031D022281B}" #usecom global IApplicationAssociationRegistration IID_IApplicationAssociationRegistration "{591209C7-767B-42B2-9FBA-44EE4615F2C7}" #comfunc global IApplicationAssociationRegistration_QueryCurrentDefault 3 wstr,int,int,sptr #comfunc global IApplicationAssociationRegistration_QueryAppIsDefault 4 wstr,int,int,wstr,sptr #comfunc global IApplicationAssociationRegistration_QueryAppIsDefaultAll 5 int,wstr,sptr #comfunc global IApplicationAssociationRegistration_SetAppAsDefault 6 wstr,wstr,int #comfunc global IApplicationAssociationRegistration_SetAppAsDefaultAll 7 wstr #comfunc global IApplicationAssociationRegistration_ClearUserAssociations 8 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。