あいかわらず、自宅の Vista マシンが復旧せず、このままだと(3)はいつ出るのか、って状態だったので、
取り急ぎ、(3)の内容を先に公開します。
まぁ、COM なので、基本的な使い方は一緒です。一応、連載もののため(笑)、(1)~(2)を読んでいない人は、
下にリンクを張っておくので、先にそちらを読んでから、(3)を読むことをお勧めします。
Vista における関連づけ用として、実際にユーザーごとの関連づけを設定するインタフェースと、
Vista の設定画面を呼び出すインタフェースの 2 つのインタフェースが追加されています。
さくっと、それらのインタフェースとメソッドを具体的な使い方とともに紹介します。
1.IApplicationAssociationRegistration インタフェース
IApplicationAssociationRegistration* pAAR = NULL;
HRESULT hr = ::CoCreateInstance( CLSID_ApplicationAssociationRegistration
, NULL, CLSCTX_INPROC, __uuidof( IApplicationAssociationRegistration )
, reinterpret_cast< void** >( &pAAR ) );
if ( SUCCEEDED( hr ) && pAAR != NULL ) {
// do something
pAAR->Release();
}
// 現在の既定として設定されている ProgID を取得
LPWSTR pszAssociation = NULL;
hr = pAAR->QueryCurrentDefault( L".html", AT_FILEEXTENSION, AL_EFFECTIVE, &pszAssociation );
if ( SUCCEEDED( hr ) && pszAssociation != NULL ) {
CString strAssoc = pszAssociation; // ここに ProgID が入る
::CoTaskMemFree( pszAssociation );
}
// 指定した ProgID が既定となっているか
BOOL bDefault = FALSE;
hr = pAAR->QueryAppIsDefault( L".html", AT_FILEEXTENSION, AL_EFFECTIVE, _T( "DonutRAPT.AssocFile.HTML" ), &bDefault );
// 指定した ProgID に紐付くすべての種別で既定となっているか
BOOL bDefault = FALSE;
hr = pAAR->QueryAppIsDefaultAll( AL_EFFECTIVE, _T( "DonutRAPT.AssocFile.HTML" ), &bDefault );
// 指定した ProgID を既定にする
hr = pAAR->SetAppAsDefault( _T( "DonutRAPT.AssocFile.HTML" ), L".html", AT_FILEEXTENSION );
hr = pAAR->SetAppAsDefault( _T( "DonutRAPT.AssocFile.URL" ), L".url", AT_FILEEXTENSION );
hr = pAAR->SetAppAsDefault( _T( "DonutRAPT.HTTP" ), L"http", AT_URLPROTOCOL );
// 指定した ProgID に紐付くすべての種別を既定にする
hr = pAAR->SetAppAsDefaultAll( _T( "DonutRAPT.AssocFile.HTML" ) );
// ユーザーの関連付け設定を初期化する
hr = pAAR->ClearUserAssociations();
2.IApplicationAssociationRegistrationUI インタフェース
// 「既定のプログラム」の画面を表示する
IApplicationAssociationRegistrationUI* pAARUI = NULL;
HRESULT hr = ::CoCreateInstance( CLSID_ApplicationAssociationRegistrationUI
, NULL, CLSCTX_INPROC, __uuidof( IApplicationAssociationRegistrationUI )
, reinterpret_cast< void** >( &pAARUI ) );
if ( SUCCEEDED( hr ) && pAARUI != NULL ) {
hr = pAARUI->LaunchAdvancedAssociationUI( _T( "DonutRAPT.AssocFile.HTML" ) );
pAARUI->Release();
}
[Vista] 関連づけ設定(1)
[Vista] 関連づけ設定(2)