はみ出しRAPTの戯言

- a day after yesterday -

目次

Blog 利用状況

ニュース

書庫

日記カテゴリ

コミュニティ リンク

[Vista] 関連づけ設定(3)

あいかわらず、自宅の 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)

投稿日時 : 2007年6月7日 10:12

コメントを追加

# nwVrVqjVaCqgPE 2021/07/03 2:10 https://amzn.to/365xyVY

Is there free software or online database to keep track of scheduled blog posts? I would also like it to keep a record of past and future posts. I am trying to avoid creating a spreadsheet in Excel..

タイトル
名前
URL
コメント