关于内存无法读取~~
Type VS_NEWINFO
astr As String * 1024
End Type
Declare Function GetFileVersionInfo Lib "Version.dll" Alias _
"GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal _
dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias _
"GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, _
lpdwHandle As Long) As Long
Declare Function VerQueryValue Lib "Version.dll" Alias _
"VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, _
lplpBuffer As Any, puLen As Long) As Long
Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
(dest As Any, ByVal Source As Long, ByVal Length As Long)
Declare Function GetSystemDirectory Lib "kernel32" Alias _
"GetSystemDirectoryA" (ByVal Path As String, ByVal cbBytes As Long) As Long
Public Function GetFileCoName(FullFileName As String) As String
Dim rc As Long
Dim lDummy As Long
Dim szBuffer() As Byte
Dim lBufferLen As Long
Dim lVerPointer As Long
Dim lVerbufferLen As Long
Dim astr As String
Dim lTran As Long
Dim ab As VS_NEWINFO
On Error Resume Next
lBufferLen = GetFileVersionInfoSize(FullFileName, lDummy)
GetFileCoName = "未知"
If Not (lBufferLen < 1) Then
ReDim szBuffer(lBufferLen)
lVerPointer = 0
rc = GetFileVersionInfo(FullFileName, 0&, lBufferLen, szBuffer(0))
rc = VerQueryValue(szBuffer(0), "\VarFileInfo\Translation", lVerPointer, lVerbufferLen)
MoveMemory lTran, lVerPointer, 4&
astr = "0" + Hex$(lTran)
astr = Right$(astr, 4) + Left$(astr, 4)
rc = VerQueryValue(szBuffer(0), "\StringFileInfo\" + astr + "\CompanyName", lVerPointer, lVerbufferLen)
If rc Then
MoveMemory ab, lVerPointer, Len(ab)
GetFileCoName = Left$(ab.astr, (InStr(ab.astr, Chr$(0)) - 1))
Else
GetFileCoName = "未知"
End If
End If
End Function