Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-86710
Aleksandr
2003-01-09 13:39
2003.01.27
Как создать убывающую индексацию для ClientDataSet?


3-86709
Соловьев
2003-01-09 12:23
2003.01.27
BatchMove не работает с вычисляемым полем!


6-87012
NickolayLI
2002-12-02 13:02
2003.01.27
BroadCast (эксперемент)


3-86639
mao
2003-01-07 18:48
2003.01.27
Проблема с кодировкой при чтении записей из dbf-файла в разных ОС


3-86684
Delphinium
2003-01-08 20:41
2003.01.27
Связывание таблиц в interBase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский