SourceForge.jp

dkutilGetParam.h

説明を見る。
00001 #ifndef _dkutilGetParam__
00002 #define _dkutilGetParam__
00003 
00004 #include "dKingyoMacro.h"
00005 #include "dkutilStdio.h"
00006 #include "dkutilCompileOption.h"
00007 
00008 #if DKUTIL_COMPILE_OPTION_MSVC
00009 #   pragma comment(lib,"version.lib")
00010 #endif
00011 
00012 namespace dkutil{
00013 
00014 extern int dkstrcpy_amap2(char *,size_t,const char *);
00015 
00016 struct GetVersionInfo{
00017 protected:
00027     void *GetVersionInfo_( LPTSTR FileName, DWORD **dwTrans )
00028     {
00029         void  *pVersionInfo=NULL; // バージョンリソースを指すポインタ
00030         UINT   uDumy = 0;        //
00031         DWORD  dwDumy = 0;       //
00032         DWORD  dwSize = 0;       // バージョンリソースのサイズ
00033 
00034         // バージョンリソースのサイズを取得
00035         dwSize = ::GetFileVersionInfoSize( FileName, &dwDumy );
00036         if ( dwSize <= 0 ) return NULL; // 失敗
00037 
00038         pVersionInfo = DKUTIL_SAFE_MALLOC( dwSize );
00039         if ( !pVersionInfo ) return NULL; // 失敗
00040 
00041         // バージョンリソースを取得
00042         if ( ::GetFileVersionInfo( FileName, 0, dwSize, pVersionInfo ) )
00043         {
00044             // バージョンリソースの言語情報を取得
00045             if ( VerQueryValue( pVersionInfo, //"\\VarFileInfo\\Translation",
00046                 "\\",(void **)dwTrans, &uDumy ) )
00047             {
00048                 return pVersionInfo;
00049             }
00050         }
00051         DKUTIL_SAFE_FREE( pVersionInfo );
00052         return NULL; // 失敗
00053     }//GetVersionInfo
00054 
00064     BOOL GetVersionValue( char *Buffer,size_t BufferSize, void *pVersionInfo, DWORD dwTrans, const char *KeyWord )
00065     {
00066         char *pValue=NULL; // バージョンリソース中のバージョン情報を指すポインタ
00067         char  Path[MAX_PATH+1]="";
00068         UINT  uDumy = 0;
00069         WORD  wCodePageID[] = { 0, 932, 949, 950, 1200, 1250, 1251, 1252, 1253, 1254, 1255, 1256 };
00070         WORD  wLanguageID[] = { 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040D, 0x040E, 0x040F, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0804, 0x0807, 0x0809, 0x080A, 0x080C, 0x0810, 0x0813, 0x0814, 0x0816, 0x081A, 0x0C0C, 0x100C };
00071 
00072         sprintf( Path, "\\StringFileInfo\\%04x%04x\\%s", LOWORD(dwTrans), HIWORD(dwTrans), KeyWord );
00073         if ( VerQueryValue( pVersionInfo, Path, (void **)&pValue, &uDumy ) )
00074         {
00075             //strcpy( Buffer, pValue );
00076             dkstrcpy_amap2(Buffer,BufferSize,pValue);
00077             return TRUE; // 成功
00078         }
00079 
00080         // バージョンリソースに言語情報が記録されていない場合
00081         for( int i = 0; i < ( numof(wCodePageID) ); i++ )
00082         {
00083             for( int j = 0; j < numof(wLanguageID); j++ )
00084             {
00085                 sprintf( Path, "\\StringFileInfo\\%04x%04x\\%s", wLanguageID[j], wCodePageID[i], KeyWord );
00086                 if ( VerQueryValue( pVersionInfo, Path, (void **)&pValue, &uDumy ) )
00087                 {
00088                     dkstrcpy_amap2(Buffer,BufferSize,pValue);
00089                     return TRUE; // 成功
00090                 }
00091             }
00092         }
00093 
00094         Buffer[0] = '\0';
00095         return FALSE; // 失敗
00096     }//GetVersionValue
00097 
00098 public:
00099     GetVersionInfo(){}
00121     bool GetInfo(const char *filename,char *buff,size_t bufsize,const char *want)
00122     {
00123         // argv[0](自分自身)のバージョン情報
00124         void *pVersionInfo=NULL;
00125         DWORD *dwTrans=NULL;
00126         char filenamebuff[1024]="";
00127         dkstrcpy_amap2(filenamebuff,sizeof(filenamebuff),filename);
00128         
00129         pVersionInfo = GetVersionInfo_(filenamebuff, &dwTrans );
00130         if (! pVersionInfo ) return false;
00131         
00132         GetVersionValue( buff,bufsize, pVersionInfo, *dwTrans, want ); 
00133         DKUTIL_SAFE_FREE( pVersionInfo );
00134         return true;
00135         
00136     }
00137     bool GetFileInfo(LPCTSTR filename,VS_FIXEDFILEINFO *vffi){
00138         ULONG tem;
00139         char filenamebuff[1024]="";
00140         dkstrcpy_amap2(filenamebuff,sizeof(filenamebuff),filename);
00141         UINT size = GetFileVersionInfoSize(filenamebuff,&tem);
00142         //size += 5;
00143         void *vbuf = DKUTIL_SAFE_MALLOC(size);
00144         bool r = false;
00145         if (GetFileVersionInfo(filenamebuff, 0, size, vbuf))
00146         {
00147                 void *buf = NULL;
00148                 VerQueryValue(vbuf,TEXT("\\"),&buf,&size);         // バージョンを取得
00149                 CopyMemory( vffi, buf, sizeof(VS_FIXEDFILEINFO)); //コピー
00150                 r = true;
00151         }
00152 
00153         // ★ vffi 構造体にいろいろ入っているのでそれを必要に応じてコピー
00154         // ★ コメントなど取得するときもこの中で取得する
00155 
00156         DKUTIL_SAFE_FREE(vbuf); // メモリ解放
00157         return r;
00158     }
00159 
00160 };//end of struct class
00161 
00162 
00165 extern int GetCompiledDKUTIL_STLPortVersion();
00166 
00169 extern int GetCompiledDKUTIL_BoostVersion();
00170 
00173 extern const char *GetCompiledDKUTIL_zlibVersionString();
00174 
00177 extern const char *GetCompiledDKUTIL_libpngVersionString();
00180 extern int GetCompiledDKUTIL_libpngVersion();
00186 
00187 extern const char *GetdKingyoUtilClassOriginalCopyright(bool flag=true,char *copy=NULL,size_t size=NULL);
00188 
00189 
00190 
00191 }//end of dkutil namespace
00192     
00193 
00194 #endif

dkutil 1.02リリース前 d金魚専用マニュアルバージョンに対してSun Dec 28 21:23:08 2003に生成されました。 doxygen 1.3.5