我可以确定我是否在VB6的Win7操作系统上?

Dev*_*erM 3 windows vb6 operating-system windows-7

我有一个用VB6编写的旧程序,需要在3个不同的平台上运行,包括运行Win7的笔记本电脑.我用Google搜索了如何从VB6确定操作系统,并找到了一些我稍微修改过的代码如下:

Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer

Public Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type


Private Const VER_PLATFORM_WIN32s = 0
Private Const VER_PLATFORM_WIN32_WINDOWS = 1
Private Const VER_PLATFORM_WIN32_NT As Long = 2


Private Function GetOS() As String
    Dim osinfo As OSVERSIONINFO
    Dim retvalue As Integer
    Dim sOS as String

    osinfo.dwOSVersionInfoSize = 148
    osinfo.szCSDVersion = Space$(128)
    retvalue = GetVersionExA(osinfo)

    Select Case osinfo.dwMajorVersion
        Case 7
            sOS = "?"  'Win7?
        Case 6
            sOS = "Vista"
         Case 5
            sOS = "XP"
         Case 4
            sOS = "Win2000"
     End Select

     MsgBox (sOS)
     return sOS     

End Function
Run Code Online (Sandbox Code Playgroud)

当我从我的WIN7笔记本电脑运行它时,osinfo.dwMajorVersion = 5,这表明它在XP机器上.

什么在这里?我可以使用此方法确定是否运行Win7吗?获取我需要的信息的最佳方式是什么?

Cod*_*ray 8

Windows 7实际上是6.1版本,而不是版本7.您正在检查错误的编号.否则,我不确定为什么你显示的代码不起作用.至少有一个问题是returnVB 6中没有关键字.GetOS函数的最后一行应该是GetOS = sOS.一旦我解决了这些问题,它对我来说也很合适.

我这里有一个完整的工作解决方案.它可以快速准确地检测所有已知版本的Windows.我亲自在至少5个不同版本的Windows上对此进行了测试,但没有任何障碍.您所要做的就是将代码复制并粘贴到项目中,它就可以了.

这证明它在我的Windows 7笔记本电脑上正常工作:

     

我真的不确定为什么每个人都在努力提出替代的,部分工作的解决方案.这个保证工作,或你的钱回来.如果它不适合您,请确保您没有"Windows XP Mode"或其他虚拟机下运行该应用程序.