| 发表于:2007-02-19 22:04:261楼 得分:20 |
你参考下 ? getversioninfo ( "c:\windows\explorer.exe " ,efvifileversion) ? getversioninfo ( "c:\windows\explorer.exe " ,efvifiledescription) ? getversioninfo ( "c:\windows\explorer.exe " ,efvicompanyname) '/************************************************************************** ' 版权所有 (c), 2004 - 2xxx, 绿豆xx室 ' ' ************************ 模 块 名 :mduversioninfo******************** '版 本 号: v1.0 '作 者: 超级绿豆 '生成日期: 2004年03月07日 '最近修改: '功能描述: '函数列表: '修改历史: '日 期: 2004年03月07日 '修改人员: 超级绿豆 '修改内容: 生成 '******************************************************************************/ ' option explicit '本模块名称 private const this_module_name as string = "mduversioninfo " public declare function getfileversioninfosize lib "version.dll " alias "getfileversioninfosizea " (byval lptstrfilename as string, lpdwhandle as long) as long public 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 public declare function verqueryvalue lib "version.dll " alias "verqueryvaluea " (byval pblock as long, byval lpsubblock as string, lplpbuffer as long, pulen as long) as long public g_fileversioninfoentrynames(12) as string public const flag_fviens_initialized as string = "999 " public enum efileversioninfoentrynames efvicomments = 0 efviinternalname efviproductname efvicompanyname efvilegalcopyright efviproductversion efvifiledescription efvilegaltrademarks efviprivatebuild efvifileversion efvioriginalfilename efvispecialbuild efviinitializedflag end enum private declare sub copymemory lib "kernel32 " alias "rtlmovememory " (destination as any, source as any, byval length as long) public function getversioninfofromresverbytes(bversionblock() as byte, byval lentryname as efileversioninfoentrynames) as string on error goto error_handler dim i as long dim lversionsize as long dim pblock() as byte, subblock as string dim lptranslate as long, btranslate() as byte dim lsizeoflptranslate as long dim lplpbuffer() as byte, pulen as long, lpbuffer as long 'lversionsize = getfileversioninfosize(sfilename, 0&) 'if lversionsize <= 0 then exit function call initfileversioninfonames 'redim pblock(lversionsize - 1) 'call getfileversioninfo(sfilename, 0&, lversionsize, pblock(0)) pblock = bversionblock verqueryvalue varptr(pblock(0)), "\\varfileinfo\\translation ", lptranslate, lsizeoflptranslate redim btranslate(lsizeoflptranslate - 1) copymemory btranslate(0), byval lptranslate, lsizeoflptranslate for i = 1 to lsizeoflptranslate / (ubound(btranslate) + 1) subblock = "\\stringfileinfo\\ " subblock = subblock & byte2hex(btranslate(), 0, 1, true) subblock = subblock & byte2hex(btranslate(), 2, 3, true) subblock = subblock & "\\ " & g_fileversioninfoentrynames(lentryname) verqueryvalue varptr(pblock(0)), subblock, lpbuffer, pulen if lpbuffer <> 0 and pulen <> 0 then redim lplpbuffer(pulen - 1) copymemory lplpbuffer(0), byval lpbuffer, pulen redim preserve lplpbuffer(instrb(lplpbuffer, chrb(0)) - 2) getversioninfofromresverbytes = strconv(lplpbuffer, vbunicode) end if next exit function error_handler: '自定义错误处理 '调用默认错误处理函数 call defaulterrorhandler(this_module_name) end function public function getversioninfo(byval sfilename as string, byval lentryname as efileversioninfoentrynames) as string on error goto error_handler dim i as long dim lversionsize as long dim pblock() as byte, subblock as string dim lptranslate as long, btranslate() as byte dim lsizeoflptranslate as long dim lplpbuffer() as byte, pulen as long, lpbuffer as long lversionsize = getfileversioninfosize(sfilename, 0&) if lversionsize <= 0 then exit function call initfileversioninfonames redim pblock(lversionsize - 1) call getfileversioninfo(sfilename, 0&, lversionsize, pblock(0)) verqueryvalue varptr(pblock(0)), "\\varfileinfo\\translation ", lptranslate, lsizeoflptranslate redim btranslate(lsizeoflptranslate - 1) copymemory btranslate(0), byval lptranslate, lsizeoflptranslate for i = 1 to lsizeoflptranslate / (ubound(btranslate) + 1) subblock = "\\stringfileinfo\\ " subblock = subblock & byte2hex(btranslate(), 0, 1, true) subblock = subblock & byte2hex(btranslate(), 2, 3, true) subblock = subblock & "\\ " & g_fileversioninfoentrynames(lentryname) verqueryvalue varptr(pblock(0)), subblock, lpbuffer, pulen if lpbuffer <> 0 and pulen <> 0 then redim lplpbuffer(pulen - 1) copymemory lplpbuffer(0), byval lpbuffer, pulen redim preserve lplpbuffer(instrb(lplpbuffer, chrb(0)) - 2) getversioninfo = strconv(lplpbuffer, vbunicode) end if next exit function error_handler: '自定义错误处理 '调用默认错误处理函数 call defaulterrorhandler(this_module_name) end function private function byte2hex(barray() as byte, optional byval lstart as long = 0, optional byval lend as long = -1, optional freversed as boolean = false) as string dim i as long lstart = iif(lstart < 0, 0, lstart) lend = iif(lend < 0, ubound(barray), lend) if freversed then for i = lend to lstart step -1 byte2hex = byte2hex & right$( "00 " & hex(barray(i)), 2) next else for i = lstart to lend byte2hex = byte2hex & right$( "00 " & hex(barray(i)), 2) next end if end function public sub initfileversioninfonames() if g_fileversioninfoentrynames(12) = flag_fviens_initialized then exit sub g_fileversioninfoentrynames(efvicomments) = "comments " '注释 g_fileversioninfoentrynames(efvicompanyname) = "companyname " '公司名 g_fileversioninfoentrynames(efviproductname) = "productname " '产品名 g_fileversioninfoentrynames(efviproductversion) = "productversion " '产品版本 g_fileversioninfoentrynames(efviinternalname) = "internalname " '内部名称 g_fileversioninfoentrynames(efvifiledescription) = "filedescription " '文件描述 g_fileversioninfoentrynames(efvifileversion) = "fileversion " '文件版本 g_fileversioninfoentrynames(efvioriginalfilename) = "originalfilename " '原始文件名 g_fileversioninfoentrynames(efvispecialbuild) = "specialbuild " '特殊编译号 g_fileversioninfoentrynames(efviprivatebuild) = "privatebuild " '私有编译号 g_fileversioninfoentrynames(efvilegalcopyright) = "legalcopyright " '合法版权 g_fileversioninfoentrynames(efvilegaltrademarks) = "legaltrademarks " '合法商标 g_fileversioninfoentrynames(efviinitializedflag) = flag_fviens_initialized '是否已经初始化标记 end sub | | |
|