Computer/C++
파일의 버젼 정보 얻기
Gu Youn
2003. 12. 14. 13:30
About 다이얼로그 만드는 방법 1. GetFileVersionInfoSize 이용해서 버젼 정보 크기 얻는다. 2. 버젼 정보를 저장할 메모리를 할당한 후에 버젼 정보를 얻는다. MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize); MemPtr = GlobalLock(MemHandle); GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr); 3. VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,&BufferLength); 함수를 이용해서 각 정보를 얻는다. -실제 소스- 코드: struct TransArray { WORD LanguageID, CharacterSet; }; DWORD VerInfo, VerSize; HANDLE MemHandle; LPVOID MemPtr, BufferPtr; UINT BufferLength; TransArray *Array; char QueryBlock[40]; // Get the product name and version from the // applications version information. String Path(Application->ExeName); //프로그램 패스 얻어오기 VerSize = GetFileVersionInfoSize(Path.c_str(), &VerInfo);//버젼 정보 크기 얻어오기 if (VerSize > 0) { MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize); MemPtr = GlobalLock(MemHandle); GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr); VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr, &BufferLength); Array = (TransArray *)BufferPtr; // Get the product name. wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductName", Array[0].LanguageID, Array[0].CharacterSet); VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength); // Set the product name caption. ProductName->Caption = (char *)BufferPtr; // Get the product version. wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductVersion", Array[0].LanguageID, Array[0].CharacterSet); VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength); // Set the version caption. Version->Caption = (char *)BufferPtr; GlobalUnlock(MemHandle); GlobalFree(MemHandle); } else { ProductName->Caption = ""; Version->Caption = ""; } Comments->Caption = "Thank you for trying this fabulous product.n" "We hope that you have enjoyed using it."; |