2-я часть класса
Private Function GetFileInfo(ByVal sFile As String, Info As FileInfoStruct) As String Dim lVerSize As Long, lTemp As Long, lRet As Long, lpBuffer As Long Dim bInfo() As Byte Dim sDesc As String, sKEY As String sKEY = GetFileInfoKey(sFile, bInfo()) Select Case Info Case Is = FileVersion sKEY = sKEY & "\FileVersion" Case Is = FileDescription sKEY = sKEY & "\FileDescription" Case Is = FSComments sKEY = sKEY & "\Comments" Case Is = FSCompanyName sKEY = sKEY & "\CompanyName" Case Is = FSInternalName sKEY = sKEY & "\InternalName" Case Is = FSLegalCopyright sKEY = sKEY & "\LegalCopyright" Case Is = FSLegalTrademarks sKEY = sKEY & "\LegalTrademarks" Case Is = FSOriginalFilename sKEY = sKEY & "\OriginalFilename" Case Is = FSProductName sKEY = sKEY & "\ProductName" Case Is = FSProductVersion sKEY = sKEY & "\ProductVersion" Case Is = FSPrivateBuild sKEY = sKEY & "\PrivateBuild" Case Is = FSSpecialBuild sKEY = sKEY & "\SpecialBuild" End Select If VerQueryValue(VarPtr(bInfo(0)), sKEY, lpBuffer, lVerSize) = 0 Then Exit Function sDesc = Space$(lVerSize) lstrcpyn sDesc, lpBuffer, lVerSize GetFileInfo = StringFromBuffer(sDesc) End Function Private Function GetNLSKey(ByteVerData() As Byte) As String Static strLANGCP As String, lpBufPtr As Long Dim strNLSKey As String, strTmp As String Dim fGotNLSKey As Integer, intOffset As Integer Dim lVerSize As Long, lTmp As Long, lBufLen As Long, lLCID As Long On Error GoTo GNLSKCleanup If VerQueryValue(VarPtr(ByteVerData(0)), "\VarFileInfo\Translation", lpBufPtr, lVerSize) <> 0 Then If Len(strLANGCP) = 0 Then lLCID = GetUserDefaultLCID() If lLCID > 0 Then strTmp = Space$(8) GetLocaleInfoA lLCID, 11, strTmp, 8 strLANGCP = StringFromBuffer(strTmp) Do While Len(strLANGCP) < 4 strLANGCP = "0" & strLANGCP Loop GetLocaleInfoA lLCID, 9, strTmp, 8 strLANGCP = StringFromBuffer(strTmp) & strLANGCP Do While Len(strLANGCP) < 8 strLANGCP = "0" & strLANGCP Loop End If End If If VerQueryValue(VarPtr(ByteVerData(0)), strLANGCP, lTmp, lBufLen) <> 0 Then strNLSKey = strLANGCP Else For intOffset = 0 To lVerSize - 1 Step 4 CopyMemory lTmp, ByVal lpBufPtr + intOffset, 4 strTmp = Hex$(lTmp) Do While Len(strTmp) < 8 strTmp = "0" & strTmp Loop strNLSKey = "\StringFileInfo\" & Right$(strTmp, 4) & Left$(strTmp, 4) If VerQueryValue(VarPtr(ByteVerData(0)), strNLSKey, lTmp, lBufLen) <> 0 Then fGotNLSKey = True Exit For End If Next If Not fGotNLSKey Then strNLSKey = "\StringFileInfo\040904E4" If VerQueryValue(VarPtr(ByteVerData(0)), strNLSKey, lTmp, lBufLen) <> 0 Then fGotNLSKey = True End If End If End If End If GNLSKCleanup: If fGotNLSKey Then GetNLSKey = strNLSKey End If End Function Private Sub Class_Initialize() FileName = vbNullString End Sub
Ответить
|