拡張子から関連付けされている実行ファイル取得

解説


   AssocQueryStringを利用した実行ファイル取得する。

   ほかにもFindExecutableを利用した方法が考えられる。しかしFindExecutableの場合は
  調べたい拡張子のファイルを事前にtmpフォルダなどに作成しておく必要があり処理が面倒。


#include "shlwapi.h"
#include "atlstr.h"

#pragma	comment(lib,"shlwapi.lib")

//
//	拡張子に関連付けられた実行ファイル取得
//
//	pszExtensionは".txt"のようにする("txt"でも構わない)
//	".bat"を取得すると"%1"になるなど実際のコマンドとならないことがある!
//
bool	GetExecutable(LPCTSTR pszExtension,CAtlString& strCommand)
{
	DWORD		dwOut;
	HRESULT		hr;
	TCHAR		pszFile[MAX_PATH+10];
	CAtlString	strExt;

	strCommand = _T("");
	if(pszExtension == NULL)
		return	false;

	strExt = pszExtension;
	if(strExt.Left(1) != _T("."))
		strExt = _T(".") + strExt;
	if(strExt.GetLength() == 1)
		return	false;

	dwOut = MAX_PATH + 10;
	hr = ::AssocQueryString(ASSOCF_NOTRUNCATE,ASSOCSTR_EXECUTABLE,strExt,_T("open"),pszFile,&dwOut);
	if(FAILED(hr) || dwOut == 0)
		return	false;

	strCommand = pszFile;

	return	true;
}

カテゴリー「VC++ TIPS」 のエントリー