//---------------------------------------------------------------------------- // EgalTech 2013-2013 //---------------------------------------------------------------------------- // File : GetModuleVer.cpp Data : 10.12.13 Versione : 1.4a4 // Contenuto : Funzione che restituisce la versione del modulo richiesto. // // // // Modifiche : 10.12.13 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "\EgtDev\Include\EgnGetModuleVer.h" #include "\EgtDev\Include\EgnStringConverter.h" #include "\EgtDev\Include\EgnStringUtils.h" #include using namespace std ; //----------------------------------------------------------------------------- bool GetModuleVersion( HINSTANCE hModule, string& sVer) { bool bOk ; wchar_t szFileName[_MAX_PATH] ; DWORD dwNULL ; DWORD dwSize ; UINT dwUsefulSize ; LPVOID lpData ; LPVOID lpUsefulData ; VS_FIXEDFILEINFO* pvsInfo ; // trovo nome del file dato l'hInstance ::GetModuleFileNameW( hModule, szFileName, _MAX_PATH) ; // mi faccio dare il buffer delle informazioni dal file dwSize = ::GetFileVersionInfoSizeW( szFileName, &dwNULL) ; lpData = malloc( size_t( dwSize)); GetFileVersionInfoW( szFileName, dwNULL, dwSize, lpData) ; // Chiedo le info standard if ( ::VerQueryValueW( lpData, L"\\", &lpUsefulData, &dwUsefulSize)) { pvsInfo = (VS_FIXEDFILEINFO*) lpUsefulData ; int nMajVer = pvsInfo->dwFileVersionMS >> 16 ; int nMinVer = pvsInfo->dwFileVersionMS % 0x10000 ; char cChar = (char) ( (pvsInfo->dwFileVersionLS >> 16) + 96) ; int nSub = pvsInfo->dwFileVersionLS % 0x10000 ; sVer = ToString( nMajVer) + "." + ToString( nMinVer) + cChar + ToString( nSub) ; bOk = true ; } else { sVer = "0.0a0" ; bOk = false ; } // disalloco il buffer free( lpData) ; return bOk ; } //----------------------------------------------------------------------------- bool GetModuleDirectory( HINSTANCE hModule, string& sDir) { wchar_t szFileNameW[_MAX_PATH] ; // trovo path del file dato l'hInstance if ( ::GetModuleFileNameW( hModule, szFileNameW, _MAX_PATH) == 0) return false ; // elimino nome.estensione del file PathRemoveFileSpecW( szFileNameW) ; // assegno valore di ritorno sDir = LPSTR( WtoA( szFileNameW)) ; return true ; } //----------------------------------------------------------------------------- bool SetCurrentDirectory( const string& sDir) { return ( SetCurrentDirectoryW( stringtoW( sDir)) != 0) ; }