//---------------------------------------------------------------------------- // 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\EgtStringConverter.h" #include "\EgtDev\Include\EGnStringUtils.h" #include using namespace std ; //----------------------------------------------------------------------------- bool GetModuleVersion( HINSTANCE hModule, string& sVer) { // imposto versione a non trovata sVer = "0.0_0" ; // trovo nome del file dato l'hInstance wchar_t szFileName[_MAX_PATH] ; ::GetModuleFileNameW( hModule, szFileName, _MAX_PATH) ; // mi faccio dare il buffer delle informazioni dal file DWORD dwNULL ; DWORD dwSize = ::GetFileVersionInfoSizeW( szFileName, &dwNULL) ; if ( dwSize == 0) return false ; LPVOID lpData = malloc( size_t( dwSize)); if ( lpData == nullptr) return false ; GetFileVersionInfoW( szFileName, dwNULL, dwSize, lpData) ; // Chiedo le info standard bool bOk = false ; LPVOID lpUsefulData ; UINT dwUsefulSize ; if ( ::VerQueryValueW( lpData, L"\\", &lpUsefulData, &dwUsefulSize)) { VS_FIXEDFILEINFO* 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 ; } // disalloco il buffer free( lpData) ; return bOk ; } //----------------------------------------------------------------------------- bool GetModuleDirectory( HINSTANCE hModule, string& sDir) { // trovo path del file dato l'hInstance wchar_t szFileNameW[_MAX_PATH] ; 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) ; }