Subversion Repositories spk

Rev

Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
114 cycrow 1
#include "version.h"
1 cycrow 2
 
3
//---------------------------------------------------------------------------------
4
char * getVersion(const char *lpFileName)
5
{
6
	VS_FIXEDFILEINFO *pInfo;
7
	DWORD handle;
8
	BYTE *data;
9
	char *version=0;
10
 
114 cycrow 11
	DWORD size=GetFileVersionInfoSizeA(lpFileName, &handle);
1 cycrow 12
	if(size > 0){
13
		data=new BYTE[size];
114 cycrow 14
		if(GetFileVersionInfoA(lpFileName, handle, size, data)){
1 cycrow 15
 
16
			UINT len;
114 cycrow 17
			VerQueryValueA(data, "\\", (LPVOID*)&pInfo, &len);
1 cycrow 18
 
19
			int numbers[4];
20
			numbers[0]=HIWORD(pInfo->dwFileVersionMS);
21
			numbers[1]=LOWORD(pInfo->dwFileVersionMS);
22
			numbers[2]=HIWORD(pInfo->dwFileVersionLS);
23
			numbers[3]=LOWORD(pInfo->dwFileVersionLS);
24
 
25
			char tmp[6];
26
			version=new char[5 * 4 + 3 + 1]; // max 5 characters for 1 number, 3 dots, null terminator
27
			char *p=version;
28
			for(int i=0; i < 4; i++){
29
				_itoa(numbers[i], tmp, 10);
30
				size_t len=strlen(tmp);
31
				memcpy(p, tmp, len);
32
				p+=len;
33
				if(i!=3)
34
					*p++='.';
35
			}
36
			*p=0;
37
		}
38
		delete[] data;
39
	}
40
	if(version==NULL){
41
		version=new char[1];
42
		version[0]=0;
43
	}
44
	return version;
45
}
46
//---------------------------------------------------------------------------------
47
char * getMyVersion(HMODULE hModule)
48
{
49
	char name[MAX_PATH];
114 cycrow 50
	GetModuleFileNameA(hModule, name, sizeof(name));
1 cycrow 51
	return getVersion(name);
52
}
53
//---------------------------------------------------------------------------------