Форум: "WinAPI";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
ВнизПомогите с версией файла!!! Найти похожие ветки
← →
LazorenkoX (2002-12-11 00:32) [0]Как мене узнать версию файла и другую инфу, и поместить её в структуру:
struct TFileInfo
{
String FMajorVersion, FMinorVersion, FRelease, FBuild,
PMajorVersion, PMinorVersion, PRelease, PBuild,
Flags, System, Type, SubType;
};
Нижеследующий код не выдаёт ошибок, но и не показывает информацию!!! Что делать?
Понимаю, что это не совсем обджект паскаль, но близкий к нему билдер :)
← →
LazorenkoX (2002-12-11 00:32) [1]TFileInfo FillFileInfo(AnsiString FileName)
{
TFileInfo FileInfo;
long lBufferLen;
DWORD *lVerPointer;
UINT lVerbufferLen;
VS_FIXEDFILEINFO udtVerBuffer;
char *FullFileName;
FullFileName=FileName.c_str();
/*** Get size ****/
lBufferLen = GetFileVersionInfoSize(FullFileName, 0);
if(lBufferLen<1)return FileInfo;
/**** Store info to udtVerBuffer struct ****/
BYTE *sBuffer;
sBuffer=new BYTE[lBufferLen];
memset(sBuffer, 0, lBufferLen);
GetFileVersionInfo(FullFileName, 0, lBufferLen, sBuffer);
VerQueryValue(sBuffer, "\\", (void**)(&lVerPointer), &lVerbufferLen);
MoveMemory(&udtVerBuffer, lVerPointer, sizeof(udtVerBuffer));
delete [] sBuffer;
/**** Determine File Version number ****/
FileInfo.FMajorVersion = HIWORD(udtVerBuffer.dwFileVersionMS);
FileInfo.FMinorVersion = AddZeros(LOWORD(udtVerBuffer.dwFileVersionMS),2);
FileInfo.FRelease = AddZeros(HIWORD(udtVerBuffer.dwFileVersionLS),2);
FileInfo.FBuild = AddZeros(LOWORD(udtVerBuffer.dwFileVersionLS),4);
/**** Determine Product Version number ****/
FileInfo.PMajorVersion = HIWORD(udtVerBuffer.dwProductVersionMS);
FileInfo.PMinorVersion = AddZeros(LOWORD(udtVerBuffer.dwProductVersionMS),2);
FileInfo.PRelease = AddZeros(HIWORD(udtVerBuffer.dwProductVersionLS),2);
FileInfo.PBuild = AddZeros(LOWORD(udtVerBuffer.dwProductVersionLS),4);
/**** Determine Boolean attributes of File ***/
if(udtVerBuffer.dwFileFlags&&VS_FF_DEBUG)
FileInfo.Flags = "Debug ";
if(udtVerBuffer.dwFileFlags&&VS_FF_PRERELEASE)
FileInfo.Flags = FileInfo.Flags + "PreRelease ";
if(udtVerBuffer.dwFileFlags&&VS_FF_PATCHED)
FileInfo.Flags = FileInfo.Flags + "Patched ";
if(udtVerBuffer.dwFileFlags&&VS_FF_PRIVATEBUILD)
FileInfo.Flags = FileInfo.Flags + "Private ";
if(udtVerBuffer.dwFileFlags&&VS_FF_INFOINFERRED)
FileInfo.Flags = FileInfo.Flags + "Information ";
if(udtVerBuffer.dwFileFlags&&VS_FF_SPECIALBUILD)
FileInfo.Flags = FileInfo.Flags + "Special ";
if(udtVerBuffer.dwFileFlags&&VFT2_UNKNOWN)
FileInfo.Flags = FileInfo.Flags + "Unknown ";
/**** Determine OS for which file was designed ***/
switch(udtVerBuffer.dwFileOS)
{
case VOS_DOS_WINDOWS16:
FileInfo.System = "DOS-Win16";
break;
case VOS_DOS_WINDOWS32:
FileInfo.System = "DOS-Win32";
break;
case VOS_OS216_PM16:
FileInfo.System = "OS/2-16 PM-16";
break;
case VOS_OS232_PM32:
FileInfo.System = "OS/2-16 PM-32";
break;
case VOS_NT_WINDOWS32:
FileInfo.System = "NT-Win32";
break;
default:
FileInfo.System = "Unknown";
break;
}
switch(udtVerBuffer.dwFileType)
{
case VFT_APP:
FileInfo.Type = "App";
break;
case VFT_DLL:
FileInfo.Type = "DLL";
break;
case VFT_DRV:
FileInfo.Type = "Driver";
switch(udtVerBuffer.dwFileSubtype)
{
case VFT2_DRV_PRINTER:
FileInfo.SubType = "Printer drv";
break;
case VFT2_DRV_KEYBOARD:
FileInfo.SubType = "Keyboard drv";
break;
case VFT2_DRV_LANGUAGE:
FileInfo.SubType = "Language drv";
break;
case VFT2_DRV_DISPLAY:
FileInfo.SubType = "Display drv";
break;
case VFT2_DRV_MOUSE:
FileInfo.SubType = "Mouse drv";
break;
case VFT2_DRV_NETWORK:
FileInfo.SubType = "Network drv";
break;
case VFT2_DRV_SYSTEM:
FileInfo.SubType = "System drv";
break;
case VFT2_DRV_INSTALLABLE:
FileInfo.SubType = "Installable";
break;
case VFT2_DRV_SOUND:
FileInfo.SubType = "Sound drv";
break;
case VFT2_DRV_COMM:
FileInfo.SubType = "Comm drv";
break;
case VFT2_UNKNOWN:
FileInfo.SubType = "Unknown";
break;
}
break;
case VFT_FONT:
FileInfo.Type = "Font";
switch(udtVerBuffer.dwFileSubtype)
{
case VFT2_FONT_RASTER:
FileInfo.SubType = "Raster Font";
break;
case VFT2_FONT_VECTOR:
FileInfo.SubType = "Vector Font";
break;
case VFT2_FONT_TRUETYPE:
FileInfo.SubType = "TrueType Font";
break;
case VFT2_UNKNOWN:
FileInfo.SubType = "Unknown";
break;
}
break;
case VFT_VXD:
FileInfo.Type = "VxD";
break;
case VFT_STATIC_LIB:
FileInfo.Type = "Lib";
break;
default:
FileInfo.Type = "Unknown";
break;
}
return FileInfo;
}
String AddZeros(String Str, int Length)
{
if(Str.Length()<Length)
{
String zeros;
zeros.StringOfChar("0",Length-Str.Length());
Str=zeros+Str;
}
return Str;
}
← →
LazorenkoX (2002-12-11 00:33) [2]Заранее благодарен.
← →
Rouse_ (2002-12-11 00:43) [3]У тю - тю, не стал разбираться в коде, тем более вечер перед праздником, кратко опиши проблему, но не
> Как мене узнать версию файла и другую инфу,
Код или подсказка нужна?
Желаю успехов
← →
Viktor Kushnir (2002-12-11 08:23) [4]Версию файла я узнавал так (NameApp - путь к файлу):
Может это натолкнет тебя на мысли.
function CurrentFileInfo(NameApp : string) : string;
var dump: DWORD;
size: integer;
buffer: PChar;
VersionPointer, TransBuffer: PChar;
Temp: integer;
CalcLangCharSet: string;
begin
size := GetFileVersionInfoSize(PChar(NameApp), dump);
buffer := StrAlloc(size+1);
try
GetFileVersionInfo(PChar(NameApp), 0, size, buffer);
VerQueryValue(buffer, "\VarFileInfo\Translation", pointer(TransBuffer),dump);
if dump >= 4 then
begin
temp:=0;
StrLCopy(@temp, TransBuffer, 2);
CalcLangCharSet:=IntToHex(temp, 4);
StrLCopy(@temp, TransBuffer+2, 2);
CalcLangCharSet := CalcLangCharSet+IntToHex(temp, 4);
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c