|
마차 님이 쓰신 글 :
: 프로그램 도중 프로그램의 버전정보를 실시간으로 가져오고 싶은데 어케 해야 되는지요?
: 프로젝트에서 버전정보를 관리하고 있는데 프로그램에서 불러오려면 어케해야 되는지요..
어디선가 받은 소스인데.. 참고하세요.
이 소스만 이용해도 원하는거 할수 있을겁니다. ^^
.. //---------------------------------------------------------------------------
AnsiString __fastcall VersionInfo(const AnsiString &sQuery)
{
DWORD dwHandle = 0, dwVersionInfoSize;
UINT uLength;
LPVOID pFileInfo, ptr;
AnsiString sOut; // 리턴될 버전 정보.
AnsiString filename = Application->ExeName;
dwVersionInfoSize = GetFileVersionInfoSize(filename.c_str(), &dwHandle);
pFileInfo = (LPVOID) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwVersionInfoSize);
GetFileVersionInfo(filename.c_str(), dwHandle, dwVersionInfoSize, pFileInfo);
VerQueryValue(pFileInfo, TEXT("\\VarFileInfo\\Translation"), &ptr, &uLength);
WORD *id = (WORD *) ptr;
AnsiString szString = "\\StringFileInfo\\" + IntToHex(id[0], 4) + IntToHex(id[1], 4) + "\\" + sQuery;
VerQueryValue(pFileInfo, szString.c_str(), &ptr, &uLength);
sOut = AnsiString((char *) ptr);
HeapFree(GetProcessHeap(), 0, pFileInfo );
return sOut;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const AnsiString InfoStr[10] = {"CompanyName", "FileDescription", "FileVersion", "InternalName", "LegalCopyright", "LegalTradeMarks", "OriginalFileName", "ProductName", "ProductVersion", "Comments"};
for (int i = 0; i < 10; i++)
{
Memo1->Lines->Add(InfoStr[i] + " : " + VersionInfo(InfoStr[i]));
}
}
|