DinopSearchBarのインストールバージョンチェック方法

   DinopSearchBarを外部プログラムなどで使用する場合に必要なバージョンチェック方法です。


   以下の情報を用いてインストールされているバージョンのチェックを行います。
     ・COMによるインスタンス生成
     ・レジストリのインストールフォルダ情報
     ・DLL内のリソース情報



void OnButton1() 
{
	int			nVer;
	CString		strMessage;

	nVer = GetDinopSearchBarVersion();
	if(nVer > 0)
		strMessage.Format("DinopSearchBarのバージョンは「%d」です。",nVer);
	else
		strMessage = "DinopSearchBarがインストールされていません";

	AfxMessageBox(strMessage);
}


#include "atlbase.h"

#import "C:\Program Files\dinop\DinopSearchBar\DinopSearchBar.dll" no_namespace


const CLSID CLSID_DinopSearchBarBand = {0x509AC252,0x12BD,0x11d5,{0x97,0x39,0x00,0x50,0x04,0xC0,0x99,0xCF}};

//
// インストールされているDinopSearchBarのバージョン番号を返す
//
//     ※大昔のバージョンやインストールされてない場合は「0」が返ります
//
int		GetDinopSearchBarVersion()
{
	HRESULT							hr;
	CComPtr<IUnknown>				lpUnknown;
	CComPtr<IDinopSearchBarBand>	lpDinop;

	//////////////////////////////////////////////////////////////////////////
	//
	// DinopSearchBarがインストールされているかどうかのチェック
	//
	::CoInitialize(NULL);										//COMの初期化
	hr= lpUnknown.CoCreateInstance(CLSID_DinopSearchBarBand);	//IDinopSearchBarBandの作成
	if(SUCCEEDED(hr) && (lpUnknown != NULL))
		hr = lpUnknown->QueryInterface(&lpDinop);				//IDinopSearchBarBandの取得

	//////////////////////////////////////////////////////////////////////////
	//
	// DinopSearchBarがインストールされているなら...
	//
	if(SUCCEEDED(hr) && (lpDinop != NULL))
	{
		CString		strFile;
		HMODULE		hInstance;
		LONG		ret;
		HKEY		hKey;
		DWORD		dwType;
		DWORD		dwLen;
		char		lpszBuff[1024];

		//////////////////////////////////////////////////////////////////////////
		//
		// DinopSearchBarのインストールフォルダをレジストリから取得
		//
		dwLen	= 1024;
		dwType	= REG_SZ;
		hKey	= NULL;
		::RegOpenKeyEx(HKEY_LOCAL_MACHINE,"software\\dinop\\DinopSearchBar",NULL,KEY_QUERY_VALUE,&hKey);
		if(hKey != NULL)
		{
			ret = ::RegQueryValueEx(hKey,"",NULL,&dwType,(BYTE*)lpszBuff,&dwLen);
			::RegCloseKey(hKey);
			if(ret == ERROR_SUCCESS)
			{
				strFile = lpszBuff;
				if(strFile.Right(1) != "\\")		//フォルダ名の末尾を確実に"\\"にする
					strFile += "\\";
				strFile += "dinopsearchbar.dll";	//dll名をアペンドしてフルパス名にする

				//////////////////////////////////////////////////////////////////////////
				//
				// DinopSearchBarのdllファイルからバージョン情報を取得
				//
				hInstance = ::LoadLibrary(strFile);
				if(::LoadString(hInstance,102,lpszBuff,1024) > 0)	//バージョン情報は"102"に保存されている
					return	atoi(lpszBuff);			//バージョン取得成功
			}
		}

	}
	return	0;		//バージョン取得失敗
}

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