CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

如何得到一个程序的版本号!

楼主moleboy(薄荷糖)2003-11-02 22:47:22 在 VB / 基础类 提问

如何得到一个程序的版本号! 问题点数:20、回复次数:10Top

1 楼xyhv(乌龙茶)回复于 2003-11-02 23:52:50 得分 0

你在.exe文件的属性的版本就可以看到Top

2 楼suntt(两条腿的狗)回复于 2003-11-03 07:17:55 得分 0

用GetFileVersionInfo     api函数Top

3 楼suntt(两条腿的狗)回复于 2003-11-03 07:25:54 得分 0

详细的内容你看  
  http://www.china-askpro.com/msg20/qa08.shtmlTop

4 楼suntt(两条腿的狗)回复于 2003-11-03 08:09:02 得分 20

刚刚看了程序,发现他写的并不是很正确。现在把全套的给你。  
   
   
  '这是一个获取文件信息的程序  
   
          Private   Filename   As   String  
            Private   Directory   As   String  
            Private   FullFileName   As   String  
   
            Private   StrucVer   As   String  
            Private   FileVer   As   String  
            Private   ProdVer   As   String  
            Private   FileFlags   As   String  
            Private   FileOS   As   String  
            Private   FileType   As   String  
            Private   FileSubType   As   String  
           
            Private   Type   VS_NEWINFO  
                  astr   As   String   *   1024  
            End   Type  
             
            Private   Type   VS_FIXEDFILEINFO  
                  dwSignature   As   Long  
                  dwStrucVersionl   As   Integer  
                  dwStrucVersionh   As   Integer  
                  dwFileVersionMSl   As   Integer  
                  dwFileVersionMSh   As   Integer  
                  dwFileVersionLSl   As   Integer  
                  dwFileVersionLSh   As   Integer  
                  dwProductVersionMSl   As   Integer  
                  dwProductVersionMSh   As   Integer  
                  dwProductVersionLSl   As   Integer  
                  dwProductVersionLSh   As   Integer  
                  dwFileFlagsMask   As   Long  
                  dwFileFlags   As   Long  
                  dwFileOS   As   Long  
                  dwFileType   As   Long  
                  dwFileSubtype   As   Long  
                  dwFileDateMS   As   Long  
                  dwFileDateLS   As   Long  
            End   Type  
   
            Private   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  
            Private   Declare   Function   GetFileVersionInfoSize   Lib   "Version.dll"   Alias   _  
                  "GetFileVersionInfoSizeA"   (ByVal   lptstrFilename   As   String,   _  
                  lpdwHandle   As   Long)   As   Long  
            Private   Declare   Function   VerQueryValue   Lib   "Version.dll"   Alias   _  
                  "VerQueryValueA"   (pBlock   As   Any,   ByVal   lpSubBlock   As   String,   _  
                  lplpBuffer   As   Any,   puLen   As   Long)   As   Long  
            Private   Declare   Sub   MoveMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   _  
                  (dest   As   Any,   ByVal   Source   As   Long,   ByVal   length   As   Long)  
            Private   Declare   Function   GetSystemDirectory   Lib   "kernel32"   Alias   _  
                  "GetSystemDirectoryA"   (ByVal   Path   As   String,   ByVal   cbBytes   As   Long)   As   Long  
             
   
            Private   Const   VS_FFI_SIGNATURE   =   &HFEEF04BD  
            Private   Const   VS_FFI_STRUCVERSION   =   &H10000  
            Private   Const   VS_FFI_FILEFLAGSMASK   =   &H3F&  
   
   
            Private   Const   VS_FF_DEBUG   =   &H1  
            Private   Const   VS_FF_PRERELEASE   =   &H2  
            Private   Const   VS_FF_PATCHED   =   &H4  
            Private   Const   VS_FF_PRIVATEBUILD   =   &H8  
            Private   Const   VS_FF_INFOINFERRED   =   &H10  
            Private   Const   VS_FF_SPECIALBUILD   =   &H20  
   
   
            Private   Const   VOS_UNKNOWN   =   &H0  
            Private   Const   VOS_DOS   =   &H10000  
            Private   Const   VOS_OS216   =   &H20000  
            Private   Const   VOS_OS232   =   &H30000  
            Private   Const   VOS_NT   =   &H40000  
   
            Private   Const   VOS_BASE   =   &H0  
            Private   Const   VOS_WINDOWS16   =   &H1  
            Private   Const   VOS_PM16   =   &H2  
            Private   Const   VOS_PM32   =   &H3  
            Private   Const   VOS_WINDOWS32   =   &H4  
   
            Private   Const   VOS_DOS_WINDOWS16   =   &H10001  
            Private   Const   VOS_DOS_WINDOWS32   =   &H10004  
            Private   Const   VOS_OS216_PM16   =   &H20002  
            Private   Const   VOS_OS232_PM32   =   &H30003  
            Private   Const   VOS_NT_WINDOWS32   =   &H40004  
             
   
            Private   Const   VFT_UNKNOWN   =   &H0  
            Private   Const   VFT_APP   =   &H1  
            Private   Const   VFT_DLL   =   &H2  
            Private   Const   VFT_DRV   =   &H3  
            Private   Const   VFT_FONT   =   &H4  
            Private   Const   VFT_VXD   =   &H5  
            Private   Const   VFT_STATIC_LIB   =   &H7  
   
   
            Private   Const   VFT2_UNKNOWN   =   &H0  
            Private   Const   VFT2_DRV_PRINTER   =   &H1  
            Private   Const   VFT2_DRV_KEYBOARD   =   &H2  
            Private   Const   VFT2_DRV_LANGUAGE   =   &H3  
            Private   Const   VFT2_DRV_DISPLAY   =   &H4  
            Private   Const   VFT2_DRV_MOUSE   =   &H5  
            Private   Const   VFT2_DRV_NETWORK   =   &H6  
            Private   Const   VFT2_DRV_SYSTEM   =   &H7  
            Private   Const   VFT2_DRV_INSTALLABLE   =   &H8  
            Private   Const   VFT2_DRV_SOUND   =   &H9  
            Private   Const   VFT2_DRV_COMM   =   &HA  
   
  Top

5 楼suntt(两条腿的狗)回复于 2003-11-03 08:09:35 得分 0

接上面  
   
   
  Private   Sub   DisplayVerInfo()  
                  '***   这个子程序获取文件的版本信息   ****  
                  Dim   rc                                 As   Long  
                  Dim   lDummy                         As   Long  
                  Dim   sBuffer()                   As   Byte  
                  Dim   lBufferLen                 As   Long  
                  Dim   lVerPointer               As   Long  
                  Dim   udtVerBuffer             As   VS_FIXEDFILEINFO  
                  Dim   lVerbufferLen           As   Long  
                  Dim   aBuffer()                   As   Byte  
                  Dim   lAdd                             As   Long  
                  Dim   astr                             As   String  
                  Dim   lTran                           As   Long  
   
                  '***   Get   size   ****  
                  lBufferLen   =   GetFileVersionInfoSize(FullFileName,   lDummy)  
                  If   lBufferLen   <   1   Then  
                        MsgBox   "无法获取文件版本信息!"  
                        Exit   Sub  
                  End   If  
   
                  '****   获取文件信息并且保存到udtVerBuffer结构中   ****  
                  ReDim   sBuffer(lBufferLen)  
                  rc   =   GetFileVersionInfo(FullFileName,   0&,   lBufferLen,   sBuffer(0))  
                  rc   =   VerQueryValue(sBuffer(0),   "\",   lVerPointer,   lVerbufferLen)  
                  MoveMemory   udtVerBuffer,   lVerPointer,   Len(udtVerBuffer)  
                                   
                  StrucVer   =   Format$(udtVerBuffer.dwStrucVersionh)   &   "."   &   _  
                        Format$(udtVerBuffer.dwStrucVersionl)  
   
                  '****   获得文件版本   ****  
                  FileVer   =   Format$(udtVerBuffer.dwFileVersionMSh)   &   "."   &   _  
                        Format$(udtVerBuffer.dwFileVersionMSl)   &   "."   &   _  
                        Format$(udtVerBuffer.dwFileVersionLSh)   &   "."   &   _  
                        Format$(udtVerBuffer.dwFileVersionLSl)  
   
                  '****   获取产品版本   ****  
                  ProdVer   =   Format$(udtVerBuffer.dwProductVersionMSh)   &   "."   &   _  
                        Format$(udtVerBuffer.dwProductVersionMSl)   &   "."   &   _  
                        Format$(udtVerBuffer.dwProductVersionLSh)   &   "."   &   _  
                        Format$(udtVerBuffer.dwProductVersionLSl)  
   
                  '****   获取文件类型   ****  
                  FileFlags   =   ""  
                  If   udtVerBuffer.dwFileFlags   And   VS_FF_DEBUG   _  
                        Then   FileFlags   =   "Debug   "  
                  If   udtVerBuffer.dwFileFlags   And   VS_FF_PRERELEASE   _  
                        Then   FileFlags   =   FileFlags   &   "PreRel   "  
                  If   udtVerBuffer.dwFileFlags   And   VS_FF_PATCHED   _  
                        Then   FileFlags   =   FileFlags   &   "Patched   "  
                  If   udtVerBuffer.dwFileFlags   And   VS_FF_PRIVATEBUILD   _  
                        Then   FileFlags   =   FileFlags   &   "Private   "  
                  If   udtVerBuffer.dwFileFlags   And   VS_FF_INFOINFERRED   _  
                        Then   FileFlags   =   FileFlags   &   "Info   "  
                  If   udtVerBuffer.dwFileFlags   And   VS_FF_SPECIALBUILD   _  
                        Then   FileFlags   =   FileFlags   &   "Special   "  
                  If   udtVerBuffer.dwFileFlags   And   VFT2_UNKNOWN   _  
                        Then   FileFlags   =   FileFlags   +   "Unknown   "  
  Top

6 楼suntt(两条腿的狗)回复于 2003-11-03 08:09:45 得分 0

接上面  
   
   
                  '****   获取文件所适应的操作系统   ****  
                  Select   Case   udtVerBuffer.dwFileOS  
                        Case   VOS_WINDOWS32  
                            FileOS   =   "Win32位操作系统"  
                        Case   VOS_WINDOWS16  
                            FileOS   =   "Win16位操作系统"  
                        Case   VOS_DOS  
                            FileOS   =   "DOS操作系统"  
                        Case   VOS_DOS_WINDOWS16  
                            FileOS   =   "DOS-Win16操作系统"  
                        Case   VOS_DOS_WINDOWS32  
                            FileOS   =   "DOS-Win32操作系统"  
                        Case   VOS_OS216_PM16  
                            FileOS   =   "OS/2-16   PM-16操作系统"  
                        Case   VOS_OS232_PM32  
                            FileOS   =   "OS/2-16   PM-32操作系统"  
                        Case   VOS_NT_WINDOWS32  
                            FileOS   =   "NT-Win32操作系统"  
                        Case   Else  
                            FileOS   =   "未知操作系统"  
                  End   Select  
                  Select   Case   udtVerBuffer.dwFileType  
                        Case   VFT_APP  
                              FileType   =   "应用程序"  
                        Case   VFT_DLL  
                              FileType   =   "动态连接库"  
                        Case   VFT_DRV  
                              FileType   =   "驱动程序"  
                              Select   Case   udtVerBuffer.dwFileSubtype  
                                    Case   VFT2_DRV_PRINTER  
                                          FileSubType   =   "打印驱动程序"  
                                    Case   VFT2_DRV_KEYBOARD  
                                          FileSubType   =   "键盘驱动程序"  
                                    Case   VFT2_DRV_LANGUAGE  
                                          FileSubType   =   "语言模块"  
                                    Case   VFT2_DRV_DISPLAY  
                                          FileSubType   =   "显示驱动程序"  
                                    Case   VFT2_DRV_MOUSE  
                                          FileSubType   =   "鼠标驱动程序"  
                                    Case   VFT2_DRV_NETWORK  
                                          FileSubType   =   "网络驱动程序"  
                                    Case   VFT2_DRV_SYSTEM  
                                          FileSubType   =   "系统驱动程序"  
                                    Case   VFT2_DRV_INSTALLABLE  
                                          FileSubType   =   "Installable"  
                                    Case   VFT2_DRV_SOUND  
                                          FileSubType   =   "声音驱动程序"  
                                    Case   VFT2_DRV_COMM  
                                          FileSubType   =   "串行驱动程序"  
                                    Case   VFT2_UNKNOWN  
                                          FileSubType   =   "未知驱动程序"  
                              End   Select  
                        Case   VFT_FONT  
                              FileType   =   "字体"  
                              Select   Case   udtVerBuffer.dwFileSubtype  
                                    Case   VFT_FONT_RASTER  
                                          FileSubType   =   "光栅字体"  
                                    Case   VFT_FONT_VECTOR  
                                          FileSubType   =   "矢量字体"  
                                    Case   VFT_FONT_TRUETYPE  
                                          FileSubType   =   "TrueType字体"  
                              End   Select  
                        Case   VFT_VXD  
                              FileType   =   "VxD"  
                        Case   VFT_STATIC_LIB  
                              FileType   =   "Lib"  
                        Case   Else  
                              FileType   =   "未知"  
                  End   Select  
                  Form1.CurrentX   =   4  
                  Form1.CurrentY   =   4  
                  Form1.Print   "文件全路径:"  
                  Form1.CurrentX   =   4  
                  Form1.Print   "文件版本:"  
                  Form1.CurrentX   =   4  
                  Form1.Print   "产品版本:"  
                  Form1.CurrentX   =   4  
                  Form1.Print   "文件标志:"  
                  Form1.CurrentX   =   4  
                  Form1.Print   "操作系统:"  
                  Form1.CurrentX   =   4  
                  Form1.Print   "文件类型:"  
                  Form1.CurrentX   =   4  
                  Form1.Print   "文件子类型:"  
                  Form1.CurrentX   =   60  
                  Form1.CurrentY   =   4  
                  Form1.Print   FullFileName  
                  Form1.CurrentX   =   60  
                  Form1.Print   FileVer  
                  Form1.CurrentX   =   60  
                  Form1.Print   ProdVer  
                  Form1.CurrentX   =   60  
                  Form1.Print   FileFlags  
                  Form1.CurrentX   =   60  
                  Form1.Print   FileOS  
                  Form1.CurrentX   =   60  
                  Form1.Print   FileType  
                  Form1.CurrentX   =   60  
                  Form1.Print   FileSubType  
                  '清除上一次保存的信息  
                  FullFileName   =   ""  
                  FileVer   =   ""  
                  ProdVer   =   ""  
                  FileFlags   =   ""  
                  FileOS   =   ""  
                  FileType   =   ""  
                  FileSubType   =   ""  
                   
                   
                  ReDim   aBuffer(lBufferLen)  
                  Dim   ab   As   VS_NEWINFO  
                   
                  lVerPointer   =   0  
                  rc   =   GetFileVersionInfo(FullFileName,   0&,   lBufferLen,   sBuffer(0))  
                  rc   =   VerQueryValue(sBuffer(0),   "\VarFileInfo\Translation",   lVerPointer,   lVerbufferLen)  
                  MoveMemory   lTran,   lVerPointer,   4&  
                  astr   =   "0"   +   Hex$(lTran)  
                  astr   =   Right$(astr,   4)   +   Left$(astr,   4)  
                  rc   =   VerQueryValue(sBuffer(0),   "\StringFileInfo\"   +   astr   +   "\FileDescription",   lVerPointer,   lVerbufferLen)  
                  MoveMemory   ab,   lVerPointer,   Len(ab)  
                  Form1.CurrentX   =   4  
                  Form1.Print   "文件描述";  
                  Form1.CurrentX   =   60  
                  Form1.Print   Left$(ab.astr,   (InStr(ab.astr,   Chr$(0))   -   1))  
                   
                  rc   =   VerQueryValue(sBuffer(0),   "\StringFileInfo\"   +   astr   +   "\ProductName",   lVerPointer,   lVerbufferLen)  
                  If   rc   Then  
                      MoveMemory   ab,   lVerPointer,   Len(ab)  
                      Form1.CurrentX   =   4  
                      Form1.Print   "产品名称";  
                      Form1.CurrentX   =   60  
                      Form1.Print   Left$(ab.astr,   (InStr(ab.astr,   Chr$(0))   -   1))  
                  End   If  
                   
                  rc   =   VerQueryValue(sBuffer(0),   "\StringFileInfo\"   +   astr   +   "\OriginalFilename",   lVerPointer,   lVerbufferLen)  
                  If   rc   Then  
                      MoveMemory   ab,   lVerPointer,   Len(ab)  
                      Form1.CurrentX   =   4  
                      Form1.Print   "文件原始名";  
                      Form1.CurrentX   =   60  
                      Form1.Print   Left$(ab.astr,   (InStr(ab.astr,   Chr$(0))   -   1))  
                  End   If  
                   
                  rc   =   VerQueryValue(sBuffer(0),   "\StringFileInfo\"   +   astr   +   "\InternalName",   lVerPointer,   lVerbufferLen)  
                  If   rc   Then  
                      MoveMemory   ab,   lVerPointer,   Len(ab)  
                      Form1.CurrentX   =   4  
                      Form1.Print   "文件内部名";  
                      Form1.CurrentX   =   60  
                      Form1.Print   Left$(ab.astr,   (InStr(ab.astr,   Chr$(0))   -   1))  
                  End   If  
                   
                  rc   =   VerQueryValue(sBuffer(0),   "\StringFileInfo\"   +   astr   +   "\CompanyName",   lVerPointer,   lVerbufferLen)  
                  If   rc   Then  
                      MoveMemory   ab,   lVerPointer,   Len(ab)  
                      Form1.CurrentX   =   4  
                      Form1.Print   "公司名称";  
                      Form1.CurrentX   =   60  
                      Form1.Print   Left$(ab.astr,   (InStr(ab.astr,   Chr$(0))   -   1))  
                  End   If  
                   
                  rc   =   VerQueryValue(sBuffer(0),   "\StringFileInfo\"   +   astr   +   "\LegalCopyright",   lVerPointer,   lVerbufferLen)  
                  If   rc   Then  
                      MoveMemory   ab,   lVerPointer,   Len(ab)  
                      Form1.CurrentX   =   4  
                      Form1.Print   "版权所有";  
                      Form1.CurrentX   =   60  
                      Form1.Print   Left$(ab.astr,   (InStr(ab.astr,   Chr$(0))   -   1))  
                  End   If  
  End   Sub  
   
  Private   Sub   Command1_Click()  
          Form1.Cls  
           
          FullFileName   =   "c:\sun.exe"  
           
          If   FullFileName   =   ""   Then  
                  Exit   Sub  
          End   If  
          Call   DisplayVerInfo  
  End   SubTop

7 楼flxa(方子)回复于 2003-11-03 08:45:14 得分 0

GetFileVersionInfoTop

8 楼fulongbiao(一个人的精彩)回复于 2003-11-03 09:40:26 得分 0

用GetFileVersionInfo     api函数  
  楼上的厉害,我就不巾贴实例了Top

9 楼passer_wave(路人)回复于 2003-11-03 10:05:03 得分 0

学习Top

10 楼liuyi3000(Dabo Liu)回复于 2003-11-03 11:21:52 得分 0

studyTop

相关问题

  • 用VB如何得到一个应用程序的版本号?
  • 在程序运行中,如何得到JVM的版本号?在线等待
  • 有谁知道如何在程序中得到编译器的版本号
  • 有谁知道如何在程序中得到编译器的版本号
  • C#程序如何控制版本号?
  • 如何Windows得到版本号?
  • 如何得到Windows版本号?
  • 如何得到其它程序的文件信息,比如版本号,公司名,内部文件名
  • 哪个函数可以得到程序的版本号?
  • 如何取应用程序的版本号?

关键词

  • vs
  • 版本号
  • 程序
  • getfileversioninfo
  • integer
  • long
  • 得到一个
  • string private
  • end type private
  • type

得分解答快速导航

  • 帖主:moleboy
  • suntt

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo