Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Как положить версию файла на Splash (http://forum.oszone.net/showthread.php?t=30605)

Megabizon 21-03-2003 18:34 209300

В Билдере взял пример создания Splash окна, хочу сделать так чтобы на этом окне через Лэйбел выводилась версия программы, в обработчике onShow сделал код:
AnsiString P=Application->ExeName;
LPTSTR P1 = P.c_str();
LPVOID FData;
DWORD Len = GetFileVersionInfoSize(P1,NULL);
GetFileVersionInfo(P1,NULL,Len,FData);
Дальше пока не стал делать, потому что на последней функции выдается ошибка из-под Билдера
Project ...... faulted with message:'privileged instruction at 0x004f0046...
ЗЫ Сплэш окно создается так
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
FSplash = new TFSplash(Application);
FSplash->Show();
FSplash->Update();
Application->Initialize();
.......
FSplash->Hide();
FSplash->Close();
Application->Run();
}
......
В чем ошибка? Или научите как это делается.

Megabizon 24-03-2003 09:08 209301

Снимается, нашел решение, ну если кому надо, то вот:
Код:

void __fastcall *TForm1::FormCreate(TObject *Sender)
{
DWORD h;
DWORD Size=GetFileVersionInfoSize(Application->ExeName.c_str(), &h);
if (Size==0)
return ;
char **buf;
buf=(char *)GlobalAlloc(GMEM_FIXED, Size);
if (GetFileVersionInfo(Application->ExeName.c_str(),h,Size,buf)!=0)
{
char **ValueBuf;
UINT Len;
VerQueryValue(buf, "\\VarFileInfo\\Translation", &(void *)ValueBuf,&Len);
if (Len>=4)
{
AnsiString CharSet=IntToHex((int )MAKELONG(*(int *)(ValueBuf+2),*(int *)ValueBuf), 8);
if(VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\ProductName").c_str(),&(void
*)ValueBuf,&Len)!=0)
AppName->Caption=ValueBuf;
if(VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\FileVersion").c_str(),&(void
*)ValueBuf,&Len)!=0)
Version->Caption=ValueBuf;
if(VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\LegalCopyright").c_str(),&(void
*)ValueBuf,&Len)!=0)
Copyright->Caption=ValueBuf;
if(VerQueryValue(buf,AnsiString("\\StringFileInfo\\"+CharSet+"\\CompanyName").c_str(),&(void
*)ValueBuf,&Len)!=0)
Company->Caption=ValueBuf;
}
}
GlobalFree(buf);
}

AppName->Caption;Version->Caption;Copyright->Caption;Company->Caption - это
объекты, на которые выводят данные о версии.

*


[s]Исправлено: Megabizon, 9:09 24-03-2003[/s]


[s]Исправлено: Megabizon, 10:22 24-03-2003[/s]


Время: 23:51.

Время: 23:51.
© OSzone.net 2001-